AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem mit D2009 und IdFTP
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit D2009 und IdFTP

Ein Thema von fealXX · begonnen am 26. Jan 2010 · letzter Beitrag vom 26. Jan 2010
Antwort Antwort
fealXX

Registriert seit: 16. Dez 2007
10 Beiträge
 
#1

Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 11:31
Hi!
Folgendes Problem:
Ich lade eine Datei hoch bei Uploaded.to, via FTP.
Das klappt ein paar mal, irgendwann gibt es aber eine Access Violation -> Lesen von Adresse 0000000
Das kuriose ist, unter Windows XP konnte ich diesen Fehler nicht Reproduzieren, nur unter Windows 2003 tritt er auf.
Ich kann auch keine Regelmässigkeit dabei erkennen *grübel*

Delphi-Quellcode:
      ftp:= tidftp.Create;
   try
              list:=tstringlist.create;
              name := ExtractFileName(form3.listview1.Items[listviewind].Caption);
              Ftp.Host:='ftp.uploaded.to';
              Ftp.Username:=Form4.Edit13.text;
              Ftp.Password:=Form4.Edit12.text;
              Ftp.Passive:=true;
              Ftp.Connect();
              Ftp.ChangeDir('/');
              Ftp.Put(form3.listview1.Items[listviewind].Caption,name);
              Ftp.list(list);
              arr1 := explode(name+' ',list.text);
              arr2 := explode(#13#10,arr1[1]);
              while(arr2[0] = '') do
              begin
                list.Clear;
                Ftp.list(list);
                arr1 := explode(name+' ',list.text);
                arr2 := explode(#13#10,arr1[1]);
              end;
              tmp1:='http://ul.to/'+arr2[0];
              Ftp.Disconnect;
         list.Free;
    except
                 on E : Exception do
                 begin
                   ShowMessage('FTPException class name = '+E.ClassName);
                   ShowMessage('FTPException message = '+E.Message);
                 end;
   end;
        ftp.Free;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 11:38
Zum Einen sollte man dynamisch erzeugte Objekte immer in try-finally einbetten, um Speicherlecks zu vermeiden.
Delphi-Quellcode:
Bla := TBla.Create;
try
  //Mach was mit Bla
finally
  Bla.Free;
end;
Dann greifst Du auf Elemente der Arrays(?) arr1 und arr2 zu, ohne vorher zu prüfen, ob diese überhaupt befüllt sind. Ansonsten zeig uns doch einmal, in welcher Zeile die Exception auftritt.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
fealXX

Registriert seit: 16. Dez 2007
10 Beiträge
 
#3

Re: Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 11:49
Zitat von DeddyH:
Zum Einen sollte man dynamisch erzeugte Objekte immer in try-finally einbetten, um Speicherlecks zu vermeiden.
Delphi-Quellcode:
Bla := TBla.Create;
try
  //Mach was mit Bla
finally
  Bla.Free;
end;
Dann greifst Du auf Elemente der Arrays(?) arr1 und arr2 zu, ohne vorher zu prüfen, ob diese überhaupt befüllt sind. Ansonsten zeig uns doch einmal, in welcher Zeile die Exception auftritt.
In welcher Zeile die Exception auftritt weiss ich leider nicht, wie gesagt, unter Windows XP (mein Homerechner, wo ich entwickle) ist der Fehler nicht reproduzierbar, während er unter Win 2003 (Server) auftritt.

Die Try Finally existieren schon, hab nur das aus dem code rauskopiert wo das problem liegen muss.

Kann das an einem Leeren Array liegen das es eine Exception "Lesen von Adresse 00000" auftritt?
Die Explode funktion hab ich hier aus der CodeLibrary wenn ich mich recht erinnere:
Delphi-Quellcode:
function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then Exit;
  if Separator = 'then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := AnsiStrPos(P, PChar(Separator));
    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5);
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index);
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 11:53
Versuch doch erst einmal, die Längen der Arrays zu prüfen, bevor Du zugreifst.
Delphi-Quellcode:
if Length(arr2) > 0 then
  while(arr2[0] = '') do
Das dann an allen entsprechenden Stellen, an denen die Arrays vor erneutem Zugriff geändert wurden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
fealXX

Registriert seit: 16. Dez 2007
10 Beiträge
 
#5

Re: Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 12:14
Hab ich nun gemacht, ändert leider nichts =/
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 12:19
Dann gehen mir auch so langsam die Ideen aus, da ja auch die fehlerverursachende Zeile nicht bekannt ist. Die Speicheradresse in der Fehlermeldung deutet zumindest darauf hin, dass auf ein nicht instanziertes Objekt zugegriffen werden soll oder etwas in der Art.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
fealXX

Registriert seit: 16. Dez 2007
10 Beiträge
 
#7

Re: Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 12:28
Zitat von DeddyH:
Dann gehen mir auch so langsam die Ideen aus, da ja auch die fehlerverursachende Zeile nicht bekannt ist. Die Speicheradresse in der Fehlermeldung deutet zumindest darauf hin, dass auf ein nicht instanziertes Objekt zugegriffen werden soll oder etwas in der Art.
Ich danke dir trotzdem, das komische ist ja, Zuhause klappts, auf dem Server nicht ._.!
Ist dir vllt eine Methode bekannt die Fehlerverursachende zeile nach dem Compilieren, also ausserhalb der IDE herauszufinden?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 12:33
Spontan fällt mir da MadExcept ein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
GHorn

Registriert seit: 24. Mär 2009
Ort: NRW
124 Beiträge
 
#9

Re: Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 12:47
... oder alle Schritte in einer Log-Datei mitprotokollieren. Zwischen dem
letzten geschriebenen und dem nächsten nicht mehr protokollierten liegt
der Hase im Pfeffer.

Wenn die Aktionen manuell gestartet werden, also keine While-Schleife, kannst
Du das auch über ShowMessage(..) eingrenzen.

Außerdem würde ich keine geschützten Begriffe wie "name" oder "index" als
Variablenbezeichnung einsetzen. Besser wäre z.B. "sName" oder "iIndex" o.ä.
  Mit Zitat antworten Zitat
fealXX

Registriert seit: 16. Dez 2007
10 Beiträge
 
#10

Re: Problem mit D2009 und IdFTP

  Alt 26. Jan 2010, 19:09
Ist gelöst, worans nun wirklich lag kann ich aber leider nicht sagen^^
Einen Tag lang rumprobieren hat geholfen^^
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz