setlength



Автор Maxic задал вопрос в разделе Другие языки и технологии

SetLength - вызов процедуру затрагивает элементы чужого массива и получил лучший ответ

Ответ от А[гуру]
for i:=0 to CN do //здесь должно быть CN-1, т. к. setlength выделяет память с учетом нуля, т. е. setlength(A,3) создает массив с элементами от 0 до 2. По поводу присвоения динамических массивов: B := A; - здесь произойдет копирование ссылки на массив, а не его элементов, т. е. при изменении массива В изменится массив А. Чтобы произвести копирование, придется выделить память для В и с помощью цикла скопировать элементы. В самой процедуре я ничего особого не увидел, в этом примере процедура вообще не выполняет никаких действий по преобразованию массива, возможно ошибка где-то в другом месте (это полный код программы?) .

Ответ от Manunich[гуру]
procedure SortCount(var A:TSortArr;n,k:integer); var B,Count:TSortArr; begin B := A; SetLength(Count,k); end; С переданной A, и назначенной Count - ничего дальше не делается, то есть после завершение процедуры, они пропадают

Ответ от Ирина Х-С[гуру]
так и должно быть, потому что var Поведение без var зависит от версии дельфи, в старых тоже изменит оригинал, потому что там у динамических массивов нет счетчика ссылок

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: SetLength - вызов процедуру затрагивает элементы чужого массива
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*