Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.01.31;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
2-1260356012
Danco
2009-12-09 13:53
2010.01.31
Функция Case ... of


15-1259443816
Юрий
2009-11-29 00:30
2010.01.31
С днем рождения ! 29 ноября 2009 воскресенье


15-1259398978
12
2009-11-28 12:02
2010.01.31
Антивирус. Коряво обновляется nod32. 4.0467.0. Помогите чем нибуд


2-1260337028
Леонид Артюхов
2009-12-09 08:37
2010.01.31
Как наложить одну картинку на другую?


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
Английский Французский Немецкий Итальянский Португальский Русский Испанский