Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
ВнизМожно ли так обращаться с памятью? Найти похожие ветки
← →
Eli (2004-08-26 12:30) [0]Допустимо ли создавать такую функцию, или всякий раз подобное действие будет приводить к потере памяти? Ведь внутри тела функции я не могу использовать free
function MyStringList(St:String):TStringList;
begin
Result:=TStringList.Create;
//....
end;
← →
Amoeba © (2004-08-26 12:35) [1]Разумеется допустимо. Но значение ф-ии обязательно должно присваиваться некой переменной данного типа. И уже у нее вызывать Free.
← →
Eli (2004-08-26 12:39) [2]Так что ли?
function MyStringList(St:String):TStringList;
var MyVar:TStringList;
begin
MyVar:=TStringList.Create;
Result:=MyVar;
MyVar.Free;
// есть ли смысл у этого странного действия?
end;
← →
Семен Сорокин © (2004-08-26 12:43) [3]
> Eli (26.08.04 12:39) [2]
> Так что ли?
неа не так, а вот так:function MyStringList(St:String):TStringList;
begin
Result:=TStringList.Create;
//....
end;
var
_sl: TStringList;
begin
_sl := MyStringList("бла-бла-бла");
....
_sl.Free
end;
← →
Анонимщик © (2004-08-26 12:46) [4]Во-первых, "бла-бла-бла" - это что?
А во-вторых, почему это ты не можешь писать
function MyStringList(St:String):TStringList;
begin
Result:=TStringList.Create;
//....
Result.Free; // лучше FreeAnNil(Result);
end;
Возьми да напиши, если приспичило.
← →
Eli (2004-08-26 12:47) [5]То есть, можно!
Об этом и спрашивал...
← →
Eli (2004-08-26 12:51) [6]function MyStringList(St:String):TStringList;
begin
Result:=TStringList.Create;
//....
Result.Free; // лучше FreeAnNil(Result);
end;
Потому что потом к этой функции не обратиться в программе...
← →
Анонимщик © (2004-08-26 12:52) [7]Что не так? Поверяй на nil в таком случае. А чтобы и прямо, и криво - то нельзя.
← →
Гаврила © (2004-08-26 12:57) [8]
> Анонимщик © (26.08.04 12:46) [4]
> Во-первых, "бла-бла-бла" - это что?
> А во-вторых, почему это ты не можешь писать
>
> function MyStringList(St:String):TStringList;
> begin
> Result:=TStringList.Create;
> //....
> Result.Free; // лучше FreeAnNil(Result);
> end;
Ну и что вернется результатом функции ???
← →
Eli (2004-08-26 12:58) [9]procedure TForm1.Button1Click(Sender: TObject);
function MyStringList(St:String):TStringList;
begin
Result:=TStringList.Create;
Result.Text:=St;
FreeAnNil(Result);
end;
begin
Caption:=MyStringList("Áëà-áëà-áëà").Text;
end;
[Error] Unit1.pas(31): Undeclared identifier: "FreeAnNil"
[Fatal Error] Project1.dpr(5): Could not compile used unit "Unit1.pas"
Вот так!
Так работает:
procedure TForm1.Button1Click(Sender: TObject);
function MyStringList(St:String):TStringList;
begin
Result:=TStringList.Create;
Result.Text:=St;
//Result.Free;
end;
begin
Caption:=MyStringList("Áëà-áëà-áëà").Text;
end;
← →
Amoeba © (2004-08-26 13:01) [10]Господа, что за глупости вы городите!
Никаких Result.Free в ф-ии не должно быть! Правильно у
> Семен Сорокин © (26.08.04 12:43) [3]
← →
Анонимщик © (2004-08-26 13:08) [11]Гаврила
Вернет nil, какие вопросы?
Eli
Не FreeAnNil, а FreeAndNil.
Но так как тебе резултьтат выполнения функции нужен, то этого делать не нужно. Другое дело, что ты и эту функцию используешь таким боком, что кривее и не придумать.
← →
Amoeba © (2004-08-26 13:10) [12]
> Анонимщик © (26.08.04 13:08) [11]
Правильно! На хрена нужна такая ф-я, если она всегда будет возвращать nil или чер-те-что.
← →
Анонимщик © (2004-08-26 13:11) [13]Amoeba ©
Должно или не должно - личное дело автора функции. В MSDN написано, что не должно? Нет? Вот и не городи лишнего.
← →
Eli (2004-08-26 13:12) [14]>>Но так как тебе резултьтат выполнения функции нужен, то этого
>>делать не нужно. Другое дело, что ты и эту функцию используешь >>таким боком, что кривее и не придумать.
Да ладно, это только для примера.
Задумано было использовать как у Сорокина, но опасался потерь памяти после тысяч обращений в цикле.
← →
Анонимщик © (2004-08-26 13:14) [15]Ну и разбирайтесь нахер сами
← →
Amoeba © (2004-08-26 13:15) [16]
> Анонимщик © (26.08.04 13:11) [13]
Причем здесь MSDN? Это относится базовым принципам программирования, поскольку в Pascal есть разница между процедурами и ф-ями.
Так что это Вы начинаете городить ерунду.
LMD
← →
Amoeba © (2004-08-26 13:18) [17]
> Задумано было использовать как у Сорокина, но опасался потерь
> памяти после тысяч обращений в цикле.
Если будешь делать так, как тебе сказали (см. мой первый пост и пример Сорокина), то никаких утечек памяти не будет.
LMD
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c