Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.02.11;
Скачать: [xml.tar.bz2];

Вниз

Функция не возвращает 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.004 c
14-32316
Гриф
2001-12-19 10:22
2002.02.11
Возраст призывника


14-32339
roman001
2001-12-22 17:18
2002.02.11
Архиватор


4-32366
is445
2001-12-12 22:13
2002.02.11
Помогите создать простую форму и пару компонент.


4-32383
Olgerd
2001-12-09 18:19
2002.02.11
Панель задач


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский