![]() |
TStringList erzeugt access violation...
Ich verstehe nichts mehr.... :|
Habe ein neues Projekt erstellt, drücke ich auf den Button erscheint die Meldung "ok".
Delphi-Quellcode:
In einem anderen Projekt habe ich ähnliches. Hier erhalte ich allerdings eine Exception die ich nicht verstehe.
private
{ Private-Deklarationen } SendeListe : TStringList; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if SendeListe.Count > 0 then ShowMessage('falsch') else ShowMessage('ok') end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin if SendeListe <> nil then SendeListe.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin SendeListe := TStringList.Create; end; Ich habe hier mal den Code auf den Button wo es passiert verkürzt:
Delphi-Quellcode:
sobald ich auf den Button drücke erhalte ich bei Zeile: "if SendeListe.Count > 0" eine Exception.
private
{ Private-Deklarationen } SendeListe : TStringList; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin SendeListe := TStringList.Create; if SendeListe.Count > 0 then ShowMessage('falsch') else ShowMessage('ok') end; --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt SoUndSo.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x00700bfd: read of address 0x02000041' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- Der Debugger spuckt über dem "count" als Meldung "Ungültiger Ausdruck im Evaluator" aus. Gibt es irgendwelche Projektdateien die man löschen kann damit dieser nicht vorhandene Fehler verschwindet. Neustart: Delphi, Rechner hat nichts gebracht. Ich verstehe leider nichts mehr. :cry: |
AW: TStringList erzeugt access violation...
Und wenn Du den Code so wie er ist mal in einem neuen Projekt einfügst? Ich sehe keinen Fehler (nur ein Speicherleck) und kann das unter XE auch nicht nachvollziehen.
|
AW: TStringList erzeugt access violation...
Heißt in diesem Projekt evtl. noch irgendetwas anderes SendeListe, eine Variable, eine Function, eine Procedure, eine Unit?
|
AW: TStringList erzeugt access violation...
Delphi-Quellcode:
füge ich die Clear Zeile ein, dann kommt die Exception nicht.
SendeListe := TStringList.Create;
SendeListe.Clear; Heißt in diesem Projekt evtl. noch irgendetwas anderes SendeListe, eine Variable, eine Function, eine Procedure, eine Unit? STRG + UMSCH + F: Nein (hatte ich bereits geprüft) |
AW: TStringList erzeugt access violation...
Wenn du mit der Maus auf TStringList fährst, wird dir angezeigt aus welcher unit diese ist (müsste classes sein). Ebenso bei SendeListe mal überprüfen.
|
AW: TStringList erzeugt access violation...
es ist die: "System.Classes.TStringList"
Ich werde die Form jetzt mal aus dem Projekt schmeissen & alles neu einfügen, mal schauen... |
AW: TStringList erzeugt access violation...
Im Debuger oder einer Messagebox mal
Delphi-Quellcode:
ausgeben, also direkt nach dem Erstellen der Stringliste
Pointer(SendeListe)
und dann vor dem Zugriff nochmal. Stehen da die selben Werte drin? Es kann natürlich noch sein, daß du im Programm z.B. einen Buffer-Overrun hast und dir diese Variable zerstörst. |
AW: TStringList erzeugt access violation...
Hallo,
bevor du das machst: Schau mal nach, ob das FOrmular ggf. 2x erzeugt wird, einmal automatisch beim Start, einmal von dir manuell erzeugt. Da habe ich schon die tollsten Fehlermeldungen bei Kollegen gesehen ;-) Grüße |
AW: TStringList erzeugt access violation...
BTW, SendeListe.Free gehört eigentlich nach FormDestroy.
|
AW: TStringList erzeugt access violation...
Arrrrggghhhhhhhh
der Fehler lag ganz woanders. Ich habe einen Record erstellt und einer Variablen den Record zugewiesen. Hierbei habe ich mit Konstanten gearbeitet und durch die Codevervollständigung (irgendjemand muss ja Schuld haben) die falsche genommen.
Delphi-Quellcode:
Später habe ich dann auf einen Wert gegriffen den es nicht gibt - ABC[11] ...
const
MaxWert = 10; MaxWertEinheiten = 20; type TRecordXYZ = Record a : Integer; end; var ABC : array[1..MaxWert] of TRecordXYZ; //statt ABC : array[1..MaxWertEinheiten] of TRecordXYZ; Trotz allem erschien die Fehlermeldung bei der Stringlist, die aber in diesem Fall nichts damit zu tun hatte. Danke für´s gucken! Sollte vielleicht öfter mal ne Pause machen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz