Автор Maxic задал вопрос в разделе Другие языки и технологии
SetLength - вызов процедуру затрагивает элементы чужого массива и получил лучший ответ
Ответ от А[гуру]
for i:=0 to CN do //здесь должно быть CN-1, т. к. setlength выделяет память с учетом нуля, т. е. setlength(A,3) создает массив с элементами от 0 до 2. По поводу присвоения динамических массивов: B := A; - здесь произойдет копирование ссылки на массив, а не его элементов, т. е. при изменении массива В изменится массив А. Чтобы произвести копирование, придется выделить память для В и с помощью цикла скопировать элементы. В самой процедуре я ничего особого не увидел, в этом примере процедура вообще не выполняет никаких действий по преобразованию массива, возможно ошибка где-то в другом месте (это полный код программы?) .
procedure SortCount(var A:TSortArr;n,k:integer); var B,Count:TSortArr; begin B := A; SetLength(Count,k); end; С переданной A, и назначенной Count - ничего дальше не делается, то есть после завершение процедуры, они пропадают
так и должно быть, потому что var Поведение без var зависит от версии дельфи, в старых тоже изменит оригинал, потому что там у динамических массивов нет счетчика ссылок