Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

Так вот кто рассылает приглашения.


Наверх

Титульная страница Поиск, карта сайта Написать письмо