Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.11;
Скачать: CL | DM;

Вниз

Функция не возвращает TStringList   Найти похожие ветки 

 
madcap ©   (2002-01-27 01:26) [0]

Привет всем!!
Объясните что я делаю не так.
Создаю новый модуль, в нем объявляю функцию :
function GetPasList:TStringList;
затем реализую ее


function GetPasList:TStringList;
begin
FList:=TstringList.Create;
//.......
//наполняю
//......
Result:=FList;
Result.SaveToFile("C:\1.txt"); // файл не пустой
Flist.Free;
end;


Проблема в том что в другом модуле функция возвращает пустой лист:-(
Если делать чтобы функция возвращал просто string то всё работает нормально
Заранее Всем благодарен.


 
~Sergius   (2002-01-27 02:29) [1]

Разумеется, лист будет пустой при выходе из функции, а точнее, после вызова FList.Free;

Когда ты делаешь Result :=Flist, что это значит? Это значит, что фунция всего лишь возвращает указатель на твой FList, а вовсе не копирует весь лист из одной области памяти в другую. Для того, чтобы лист скопировать из одной области памяти в другую и указатель на эту новую область сохранить в другой переменной существует метод Assign. Но в данном случае это не нужно (неоптимально). Делается так:


function GetPasList:TStringList;
var FList: TStringList;
begin
FList:=TstringList.Create;
//.......
//наполняю
//......
Result:=FList;
Result.SaveToFile("C:\1.txt"); // Файла может и не быть :)
//Flist.Free; "нельзя
end;


А когда вызываешь функцию в другом месте:


var Lst: TStringList;
begin
try
Lst := GetPastList;
//
// делаешь со списком что нужно
//
finally
Lst.Free;
end;
end.


P.S. Пальца и яйца в солонку не совать! (c) Общепит



 
aus ©   (2002-01-27 02:34) [2]

>в другом модуле функция возвращает пустой лист

вроде не должна возвращать даже пустой лист, после обращения к результату функции должен быть Access Violation.


 
Suntechnic ©   (2002-01-27 06:56) [3]

По сути проблемы добавить нечего, предыдущие посты полностью указали на проблему, хочу лишь отметить, что вариант предложенный ~Sergius, конечно же рабочий, только это плохая техника: объект создаётся в одном месте, а удаляется в другом. Если требуется заполнить лист, то создавай его там где нужно, а в GetPasList передавай указатель, и там всего лишь заполняй лист, без его создания.


 
Набережных С.   (2002-01-27 12:06) [4]

А лучше - в функции Result:=TStringList.Create и без всяких FList и Free.



Страницы: 1 вся ветка

Текущий архив: 2002.02.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
1-32197
sasa_verman
2002-01-29 14:32
2002.02.11
TClientDataSet нужно заполнить ланими из масива, а сам ДатаСет никчему не привязан


14-32329
Nimda
2001-12-21 14:58
2002.02.11
Winamp


1-32250
Solod
2002-01-28 10:45
2002.02.11
Наводка на ответ Johnmen


7-32353
Beginer
2001-10-29 14:37
2002.02.11
Как пользоваться вторым экраном.


1-32194
daosv
2002-01-26 13:34
2002.02.11
Как узнать на какие экранные координаты переместился левый и правый верхний угол формы при перетаскивании самой формы?