Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.034 c
4-1090743349
ogf
2004-07-25 12:15
2004.09.12
хук на запуск прог


1-1093866941
mouse_web
2004-08-30 15:55
2004.09.12
ListBox и колонки


14-1093162782
able
2004-08-22 12:19
2004.09.12
Как можно сделать, чтобы сайт по запросу был на первых строчках?


1-1093588084
Stype
2004-08-27 10:28
2004.09.12
Загрузочная форма


3-1092680411
Java73
2004-08-16 22:20
2004.09.12
Проблема с выводом данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский