![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Tstring list
alshtam © (2007-09-17 10:25:00)написал код и столкнулся с неожиданной проблемой:
function TConvertExel.loadXLS(items:integer):tstringlist;
var
i:integer;
s:string;
str:tstringlist;
begin
str:=tstringlist.Create;
i:=1;
s:=xl.cells[items,i];
while not(s='') do
begin
result.Add(s);
str.Add(s);
i:=i+1;
s:=xl.cells[items,i];
end;
str.Free;
end;
так работает, хотя str явно лишняя
function TConvertExel.loadXLS(items:integer):tstringlist;
var
i:integer;
s:string;
str:tstringlist;
begin
str:=tstringlist.Create;
i:=1;
s:=xl.cells[items,i];
while not(s='') do
begin
result.Add(s);
// str.Add(s);
i:=i+1;
s:=xl.cells[items,i];
end;
str.Free;
end;
так выдает access violation в строке result.Add(s);
не могу понять в чем дело, помогите пожалуста!
alshtam (2007-09-17 10:39:00) [21]Ohead:=TStringList.Create;
Ohead:=loadXLS(1);
alshtam (2007-09-17 10:38:00) [22]уважаемые если я result инициализирую, у меня память начинает терятся
{RASkov} (2007-09-17 10:38:00) [23]> Хотя зачем Free, я так и не понял.
Free ни в коем случае не нужно... иначе нафик она нужна если она(функция) не вернет результат :)
Тогда уж процедурой оформлять, раз результат не нужен...
Jeer (2007-09-17 10:36:00) [24]
> str:tstringlist;
> begin
> str:=tstringlist.Create;
А это зачем ?
Надо Result := TStringList.Create;
Anatoly Podgoretsky (2007-09-17 10:36:00) [25]> alshtam (17.09.2007 10:25:00) [0]
result не инициализирован
Desdechado (2007-09-17 10:35:00) [26]> так работает, хотя str явно лишняя
Вместо Str делайresult := tstringlist.Create;, а Str выкини.
А то функция твоя ничего не возвращает.
Хотя зачем Free, я так и не понял.
{RASkov} (2007-09-17 10:35:00) [27]> [0] alshtam © (17.09.07 10:25)
Result нужно создать...
А у тебя ни в первом ни во втолром он не создается, а обращение внутри к нему есть... так, что оба варианта не рабочии...
а Str: TStringList явно лишняя в обоих случаях....