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 - вызов процедуру затрагивает элементы чужого массива
спросили в Мода
Советы девушкам. Как выглядеть на миллион.
Vse chto vi skazali sdelaet devushku opratnoy i ne vulgarnoy... No eto ne pokazet ee status i daze
подробнее...

delphi - как написать функцию, которая возвращает массив?
Опиши свой ТИП динамического массива. Тогда проще:

type
RealArray = array of
подробнее...

Delphi как сделать так, чтоб результатом функции был двумерный массив
Для начала создадим новый тип данных:

type
TArray2x = array of array of
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Free Pascal
Как из массива удалить элемент?
Судя по твоим предыдущим вопросам, язык Паскаль. Ну так вот, для обычного массива это невозможно.
подробнее...
спросили в Air Vietnam Textron
Подскажите по делфи, TMemoryStream не могу считать массив...
Вы пишете откровенную ересь. Для Delphi имеется шаблонный механизм сериализации (запись/чтение в
подробнее...

как задать массив?
При таком описании границы указывать обязательно. Можно написать переменную n, но с условием, что
подробнее...

Как изменит системную переменную Path с помощью delphi?
Для этого используется API функция GetEnvironmentVariable.

GetEnvironmentVariable
подробнее...

Wake-on-LAN +Delphi
program WOL;

{$APPTYPE CONSOLE}

uses
Windows,
SysUtils,

подробнее...

Что значит код ошибки 5, возвращаемый функцией GetLastError?
Используйте следующую функцию, для определения описания ошибки:
function GetLastErrorText:
подробнее...

Организовать ввод одномерного массива
Вот что удалось найти
Динамические массивы в Паскале. Динамические массивы в Паскале не имеют
подробнее...

Как задать массив в Delphi?
<название>:array[размерность] of <тип>

Например: m:array[1..5000] of integer -
подробнее...
спросили в Inheritance Стек
Реализовать в Delphi организацию работы СТЕКА.
Ну как минимум стараться передавать в процедуры и функции не переменные а указатели на них... в
подробнее...
 

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

Имя*

E-mail:*

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