Почему возникает ошибка в динамическом массиве?

Рейтинг: 0Ответов: 2Опубликовано: 12.03.2011

Есть динамический массив строк sample и целое число num. Что не так в этом коде:

sample[num] := 'blah blah blah';  
num := num + 1;  
setLength(sample, num);

Вылетает с "external: SIGSEGV"?!

Ответы

▲ 2

Если отключена проверка на границы массива, то пропустив инициализацию num можно в итоге получить такую ошибку. Добавление в конец лучше произвести

if length(sample)>0 then
sample[length(sample)-1]:='Что-то строчное';
setlength(sample,length(sample)+1);

Но правильнее сначала выделить память перед операцией и присвоить:

setlength(sample,length(sample)+1);
sample[length(sample)-1]:='Что-то строчное';

length() - функция asm, поэтому много времени не требует.

▲ 1

По вашему вопросу есть обширное обсуждение: Error: Project raised exception class 'External:SIGSEGV'.

Похоже, там есть кое-какие решения.