Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Exception EAccessviolation Error (https://www.delphipraxis.net/161930-exception-eaccessviolation-error.html)

Punica 27. Jul 2011 21:47

Exception EAccessviolation Error
 
Guten Tag,

ich bekomme folgende Meldung direkt beim Start meiner Console application.

Code:
---------------------------
Application Error
---------------------------
Exception EAccessViolation in module Project1.exe at 0001D1B8.

Access violation at address 0041D1B8 in module 'Project1.exe'. Read of address 00000118.


---------------------------
OK  
---------------------------
hier der Delphi Code

Delphi-Quellcode:
program Project1;

uses
  SysUtils,
  classes,
  idhttp,
  windows,
  IdBaseComponent,
  IdComponent,
  IdTCPConnection,
  IdTCPClient;

var
postdata : tstringlist;
FHTTP: TIDHTTP;

begin

 postdata := tstringlist.Create;
 postdata.Add('a=test1');
 postdata.Add('b=test2');
 postdata.Add('c=test3');
 FHTTP.Post('http://server.de/test.php',postdata);

end.
Der Fehler kommt immer in der letzten Zeile (hier FHTTP.Post..)

Was kann der Fehler sein?

Google hat nichts geholfen.

Mfg

TheReaper 27. Jul 2011 22:07

AW: Exception EAccessviolation Error
 
FHTTP ist ja auch nicht erstellt. Kein wunder das es kracht.

himitsu 27. Jul 2011 22:41

AW: Exception EAccessviolation Error
 
Google: Delphi "Access violation at address" "in module" "Read of address"

Auch hier im Forum findet man "zuviele" Threads, bezüglich "Zugriffsverletzung" und "Read of address 0000xxxx".
0 = nil = irgendwas existiert nicht

Und zum Glück werden globale Variablen automatisch mit 0/nil initialisiert.

Punica 28. Jul 2011 18:54

AW: Exception EAccessviolation Error
 
Zitat:

Zitat von TheReaper (Beitrag 1113888)
FHTTP ist ja auch nicht erstellt. Kein wunder das es kracht.

Das verstehe ich nicht genau.

Delphi-Quellcode:
var
postdata : tstringlist;
FHTTP: TIDHTTP;
@himitsu

ich habe schon gegoogelt leider hat mir ads nicht weitergeholfen.

himitsu 28. Jul 2011 19:14

AW: Exception EAccessviolation Error
 
Zitat:

Zitat von Punica (Beitrag 1114029)
Das verstehe ich nicht genau.

Delphi-Quellcode:
postdata : tstringlist;
FHTTP: TIDHTTP;
Das sind nur die variablen.

Hier
Delphi-Quellcode:
postdata := tstringlist.Create;
hast du die TStringList erstellt und an postdata zugewiesen.
Aber nirgendwo wird eine TIDHTTP-Instanz erstellt und an FHTTP übergeben.

PS: Du gibst auch nirgendwo die erstellten Instanzen wieder frei.
Delphi-Quellcode:
postdata.Free;
FHTTP.Free;
Wenn man etwas erstellt, dann muß man es auch wieder freigeben, es sei denn man beauftragt jemand anderes dieses zu tun (z.B. siehe Owner, welchen man manchmal angeben kann)

DeddyH 29. Jul 2011 09:38

AW: Exception EAccessviolation Error
 
Also muss das etwa so aussehen:
Delphi-Quellcode:
begin
 FHTTP := TIDHTTP.Create(nil);
 try
   postdata := tstringlist.Create;
   try
     postdata.Add('a=test1');
     postdata.Add('b=test2');
     postdata.Add('c=test3');
     FHTTP.Post('http://server.de/test.php',postdata);
   finally
     postdata.Free;
   end;
 finally
   FHTTP.Free;
 end;
end.
(Ob das jetzt alles so stimmt, weiß ich nicht, da ich die Indy-Komponenten nicht aus dem Kopf beherrsche)

geskill 29. Jul 2011 11:36

AW: Exception EAccessviolation Error
 
Zitat:

Zitat von DeddyH (Beitrag 1114072)
(Ob das jetzt alles so stimmt, weiß ich nicht, da ich die Indy-Komponenten nicht aus dem Kopf beherrsche)

Hehe, ne so wird das höchstwahrscheinlich nichts =)
- Kein ContentType; der Server weiß überhaupt nicht in welchem Format die Parameter ankommen
- Parameter in einer TStringList führt zu Problemen mit Zeilenumbrüchen und zu Encodingproblemen mit UTF-8 Webseiten


Hier mal ein Basis Beispiel bei einer ISO-8859-X Webseite:
Delphi-Quellcode:
begin
  FHTTP := TIDHTTP.Create(nil);
  try
    postdata := TStringStream.Create('');
    try
      postdata.WriteString('a=test1&');
      postdata.WriteString('b=test2&');
      postdata.WriteString('c=test3&');

      FHTTP.Request.ContentType := 'application/x-www-form-urlencoded';
      FHTTP.Post('http://server.de/test.php', postdata);
    finally
      postdata.Free;
    end;
  finally
    FHTTP.Free;
  end;
end.
Ich werde auch nicht Müde um auf mein Tutorial zu verlinken :mrgreen:
http://www.delphipraxis.net/160152-i...protokoll.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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