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

Вниз

EAccessViolation   Найти похожие ветки 

 
Andrewtitoff ©   (2009-12-07 09:37) [0]

Здравствуйте уважаемые мастера!, помогите решить проблему, никак немогу разобраться откуда взялся
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(">Ваш запрос не дал результатов.<",html)>0 then
result:="Ваш запрос не дал результатов";
if pos(""return cancelInvitation(",html)>0 then
begin
result:=html;
result:=Pars_kv("В группе",html,"приглашени");
result:=MegaPars_d("<span",result,"span>");
end;
temp.Free;
end;

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;


а когда пытаюсь добавить if then появляется ошибка

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);
if pos("У Вас недостаточно прав для совершения этого действия.",html)>0 then
result:="У Вас недостаточно прав для совершения этого действия." else
begin
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(">Ваш запрос не дал результатов.<",html)>0 then
result:="Ваш запрос не дал результатов";
if pos(""return cancelInvitation(",html)>0 then
begin
result:=html;
result:=Pars_kv("В группе",html,"приглашени");
result:=MegaPars_d("<span",result,"span>");
end;
end;
temp.Free;
end;

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;


 
Anatoly Podgoretsky ©   (2009-12-07 09:51) [1]

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


 
Andrewtitoff ©   (2009-12-07 09:57) [2]


> Anatoly Podgoretsky ©   (07.12.09 09:51) [1]
> Так вот кто рассылает приглашения.

Вообщето если бы вы были внимательны - то увидель вы что это не приглашение, а как раз наоборот отмена приглашений...
P.S.
Как всегда огромное спасибо за неоценимую помощь в решении моих вопросов.


 
Amoeba ©   (2009-12-07 10:08) [3]


> 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 10:13) [4]


> Amoeba ©   (07.12.09 10:08) [3]

Ну я так в принципе и подумал, только вот проблема в том - что в первом представленном мною варианте эта процедура точно такая же и никаких ошибок не возникает...


 
Andrewtitoff ©   (2009-12-07 10:17) [5]


> Result := TStringList.Create

Хотя действительно помогает, но при чем тут if-then ?...


 
RWolf ©   (2009-12-07 10:19) [6]


> Замените эту строку на Result := TStringList.Create

а лучше этот Create делать в вызывающей функции и передавать полученный объект в процедуру-мегапарсер параметром.


 
clickmaker ©   (2009-12-07 13:46) [7]

temp := TStringList.Create; // создали объект

temp:=MegaPars("cancelInvitation",html,")""); // вызвали функцию, которая создает такой же объект, не убив старый - утечка памяти.
да и зачем его создавать в функции, когда он уже есть?


 
clickmaker ©   (2009-12-07 13:47) [8]

да, и зачем сразу после temp := TStringList.Create; делать temp.Clear;?


 
Andrewtitoff ©   (2009-12-07 15:04) [9]


> clickmaker ©   (07.12.09 13:46) [7]
> temp := TStringList.Create; // создали объектtemp:=MegaPars("cancelInvitation",
> html,")""); // вызвали функцию, которая создает такой же
> объект, не убив старый - утечка памяти.да и зачем его создавать
> в функции, когда он уже есть?

Чет я совсем запутался, а как тогда?, если убираю
temp := TStringList.Create;
Result := TStringList.Create;
то - опять та же ошибка...
или
Result := TStringList.Create;
нужно оставить?


 
RWolf ©   (2009-12-07 15:16) [10]

всё просто.
создавать (Create) объект нужно до его использования.
а когда объект станет не нужен — желательно его уничтожить (Free).


 
йцукен   (2009-12-07 15:20) [11]


> Andrewtitoff ©   (07.12.09 15:04) [9]

procedure MegaPars(T_, ForS, _T: string; Res: Tstringlist);
все Result"ы поменять на Res"ы

MegaPars("cancelInvitation",html,")"", temp);



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

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

Наверх




Память: 0.5 MB
Время: 0.025 c
15-1259333816
Демо
2009-11-27 17:56
2010.01.31
Ветку реестра может кто кинуть?


15-1259343501
xayam
2009-11-27 20:38
2010.01.31
SSH-клиент с автоматический входом


4-1227704906
Mamed
2008-11-26 16:08
2010.01.31
Load Fond


15-1258961960
Palladin
2009-11-23 10:39
2010.01.31
Простенький NAT сервер под Windows XP


15-1258467927
kyn66
2009-11-17 17:25
2010.01.31
О битовой математике