![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Почему программа начала выдавать такую ошибку?
Код:
procedure CreateBuffer(Names: TStrings; var P: TBuffer);
var
i, j, l : integer;
begin
for i := 0 to Names.Count-1 do
begin
l:= Length(P);
SetLength(P, L+Length(Names[i])+1);
for J := 0 to Length(Names[i])-1 do
begin
if J > Length(Names[i])-1 then exit;
P[L + J]:= Names[i] [J + 1];
P[L + J]:= #0;
end;
end;
SetLength(P, Length(P)+1);
P[Length(P)]:= #0; // ошибка тут
end;http://i7.picsplace.ru/images/230414...2100b6a88d.png Последний раз редактировалось Electronic_Arts, 23.04.2014 в 02:33. |
|
#2
|
|||
|
|||
|
А что такое TBuffer? Динамический массив? Тогда там нумерация начинается с 0 и последний элемен имеет индекс Length()-1.
|
|
#3
|
||||
|
||||
|
Код:
type TBuffer = array of Char; Код:
SetLength(P, Length(P)+1); P[Length(P)]:= #0; end; И еще одно это проблема начала возникать после того как я решил все предупреждения в логах... до этого все работало без ошибок и все предупреждения которые были решены не имели отношения к этой процедуре... |
|
#4
|
|||
|
|||
|
но ведь мы же размер увеличиваем на единицу почему -1??
после того, как размер увеличиваем на единицу, ты берёшь Length(P), который уже стал больше на единицу. например, Length(P) = 5; после Код:
SetLength(P, Length(P)+1); а здесь и будет ошибка Код:
P[Length(P)]:= #0; |
|
#5
|
||||
|
||||
|
Цитата:
Код:
P[Length(P)] Код:
P[Length(P) - 1] Код:
P[High(P)] Цитата:
|
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Electronic_Arts (23.04.2014)
| ||
|
#6
|
||||
|
||||
|
Цитата:
(например какая та переменная не используется и все такое создал для проверки кода потом забыл) poli-smen СПАСИБО High(p) - решил проблему... |