Главная страница
    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.005 c
1-1234695610
stas
2009-02-15 14:00
2010.01.31
TWebbrowser получить картинки


11-1210698126
AndreyRus
2008-05-13 21:02
2010.01.31
Unit KOLadd implicitly imported into package MirrorKOLPackage


15-1259598607
TIF
2009-11-30 19:30
2010.01.31
Серия вебинаров Embarcadero по Delphi 2010


4-1228146698
Пётр
2008-12-01 18:51
2010.01.31
Список окон Alt+Tab


4-1227649316
KilkennyCat
2008-11-26 00:41
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский