Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
ВнизPointer в функции. Найти похожие ветки
← →
qaaqqa (2007-08-17 11:04) [0]Если я использую примерную функцию ниже, нужно ли мне гдето заботиться об освобождении памяти под Result.
type
Tlala = record
la: word;
la2: dword;
end;
Plala = ^TLala;
function sss(s: string): Plala;
begin
New(Result);
Result.la := 2;
Result.la2 := 0;
if s = "test" then Result := nil;
end;
Т.е. я где-то вызываю lalal := sss("---"); и мне не следует заботиться о том что внутри функции для результата выделяется память New?
А если внутри функции вызывать некое условие, уже после выделения по New, нужно ли удалять выделенную память, т.е. делатьif s = "test" then
begin
Result := nil;
Free(Result);
end;
Или нет?
← →
umbra © (2007-08-17 11:08) [1]
> и мне не следует заботиться о том что внутри функции для
> результата выделяется память
не следует. если побеспокоитесь, то функция не сможет вернуть результат.
← →
Zeqfreed © (2007-08-17 11:08) [2]Выделил память — освободи после использования.
← →
DrPass © (2007-08-17 11:09) [3]
> Result := nil;
> Free(Result);
Хм... если тебе нужно выпить вина и повеситься - в каком порядке ты это будешь делать? Сначала повесишься, что ли?
Dispose(Result);
Result:= nil;
> Т.е. я где-то вызываю lalal := sss("---"); и мне не следует
> заботиться о том что внутри функции для результата выделяется
> память New?
Следует. После того, как ты обработал ее результат
← →
qaaqqa (2007-08-17 11:13) [4]Ну а где её освобождать то?
вызов вот так:
varlalal: Plala;
varlalal := sss("---");
Освобождать varlala ?
← →
DVM © (2007-08-17 11:14) [5]
> qaaqqa
Подход, имхо, неправильный. Зачем здесь вообще указатели?
← →
DVM © (2007-08-17 11:15) [6]В твоем случае функция либо выделяет либо не выделяет память. Если она выделяет, то кто-то ее должен потом освобождать. Правильнее было бы, чтобы кто-то выделял, передавал в функцию и потом освобождал.
← →
DVM © (2007-08-17 11:18) [7]
function sss(s: string; var p: Plala): boolean;
begin
result := false;
if s <> "test" then
if Assigned(p) then
begin
p.la := 2;
p.la2 := 0;
result := true;
end;
end;
← →
DVM © (2007-08-17 11:27) [8]ну а потом так:
pp := New(Plala);
try
if sss("12345", pp) then ... else ....;
finally
Dispose(pp)
end;
← →
DrPass © (2007-08-17 11:36) [9]
> qaaqqa (17.08.07 11:13) [4]
> Освобождать varlala ?
Как минимум, да. Но
> Правильнее было бы, чтобы кто-то выделял, передавал в функцию
> и потом освобождал.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c