Главная страница
    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.48 MB
Время: 0.005 c
15-1259357418
Юрий
2009-11-28 00:30
2010.01.31
С днем рождения ! 28 ноября 2009 суббота


1-1234880388
Константин
2009-02-17 17:19
2010.01.31
Перевод ASCI в HEX и наоборот?


2-1260359005
Xmen
2009-12-09 14:43
2010.01.31
Проверка компа.


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


2-1260279624
Matveih1
2009-12-08 16:40
2010.01.31
Поиск на примапином диске





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский