![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
EAccessViolation
Andrewtitoff © (2009-12-07 09:37:00)Здравствуйте уважаемые мастера!, помогите решить проблему, никак немогу разобраться откуда взялся
First chance exception at $7C812AFB. Exception class EAccessViolation with message 'Access violation at address
Вот так все работает нормально:
Function find_delete(group,offset:string;{50}var id,hash:tstringlist):string;
var
html:string;
i : integer;
temp : tstringlist;
begin
temp := TStringList.Create;
temp.Clear;
id.Clear;
id.Text:=
'offset='+offset+#13#10+
'section=3';
html := MainForm.http1.post(' http://vkontakte.ru/groups.php?act=people&gid='+group,id);
temp:=MegaPars('cancelInvitation',html,')"');
id.Clear;
hash.Clear;
for I := 0 to temp.Count - 1 do
begin
id.Add(pars('(',temp.Strings[i],', '));
hash.Add(pars(', ''',temp.Strings[i],''''));
end;
result:='Неизвесный результат';
if pos('>Ваш запрос не дал результатов.Ваш запрос не дал результатов.
йцукен (2009-12-07 15:20:00) [1]
> Andrewtitoff © (07.12.09 15:04) [9]
procedure MegaPars(T_, ForS, _T: string; Res: Tstringlist);
все Result'ы поменять на Res'ы
MegaPars('cancelInvitation',html,')"', temp);
RWolf (2009-12-07 15:16:00) [2]всё просто.
создавать (Create) объект нужно до его использования.
а когда объект станет не нужен — желательно его уничтожить (Free).
Andrewtitoff (2009-12-07 15:04:00) [3]
> clickmaker © (07.12.09 13:46) [7]
> temp := TStringList.Create; // создали объектtemp:=MegaPars('cancelInvitation',
> html,')"'); // вызвали функцию, которая создает такой же
> объект, не убив старый - утечка памяти.да и зачем его создавать
> в функции, когда он уже есть?
Чет я совсем запутался, а как тогда?, если убираю
temp := TStringList.Create;
Result := TStringList.Create;
то - опять та же ошибка...
или
Result := TStringList.Create;
нужно оставить?
clickmaker (2009-12-07 13:47:00) [4]да, и зачем сразу после temp := TStringList.Create; делать temp.Clear;?
clickmaker (2009-12-07 13:46:00) [5]temp := TStringList.Create; // создали объект
temp:=MegaPars('cancelInvitation',html,')"'); // вызвали функцию, которая создает такой же объект, не убив старый - утечка памяти.
да и зачем его создавать в функции, когда он уже есть?
RWolf (2009-12-07 10:19:00) [6]
> Замените эту строку на Result := TStringList.Create
а лучше этот Create делать в вызывающей функции и передавать полученный объект в процедуру-мегапарсер параметром.
Andrewtitoff (2009-12-07 10:17:00) [7]
> Result := TStringList.Create
Хотя действительно помогает, но при чем тут if-then ?...
Andrewtitoff (2009-12-07 10:13:00) [8]
> Amoeba © (07.12.09 10:08) [3]
Ну я так в принципе и подумал, только вот проблема в том - что в первом представленном мною варианте эта процедура точно такая же и никаких ошибок не возникает...
Amoeba (2009-12-07 10:08:00) [9]
> function MegaPars(T_, ForS, _T: string): Tstringlist;
> var
> p: integer;
> begin
> Result.Clear; В этой строке возникает ошибка
> if (T_ = '') and (ForS = '') and (_T = '') then
> Exit;
> repeat
> p := Pos(T_, ForS);
> if p > 0 then
> begin
> if Pars(T_, ForS, _T) <> '' then Result.Add( Pars(T_,
> ForS, _T));
> ForS := Copy(ForS, p+1, Length(ForS));
> end;
> until p = 0;
> end;
Ошибка неизбежно возникает при попытке вызвать метод несуществующего объекта Result.
Замените эту строку на
Result := TStringList.Create
и будет Вам счастье (остальной код проверять лень).
Оставлять Result.Clear здесь не нужно.
Andrewtitoff (2009-12-07 09:57:00) [10]
> Anatoly Podgoretsky © (07.12.09 09:51) [1]
> Так вот кто рассылает приглашения.
Вообщето если бы вы были внимательны - то увидель вы что это не приглашение, а как раз наоборот отмена приглашений...
P.S.
Как всегда огромное спасибо за неоценимую помощь в решении моих вопросов.
Anatoly Podgoretsky (2009-12-07 09:51:00) [11]Так вот кто рассылает приглашения.