Текущий архив: 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.48 MB
Время: 0.005 c