Entwickler-Ecke

Sonstiges (Delphi) - Fehler: Access Violation...


pupu - Sa 04.11.06 23:03
Titel: Fehler: Access Violation...
hi
ich habe folgende zeile an der die fehlermeldung:

"Access violation at address 00463E7F in module 'Code.exe'. Write of address 00000304."

kommt...


Delphi-Quelltext
1:
memo1.text:=liste[0];                    


"liste" is vom Typ TStringlist und in "liste" wurde zuvor der inhalt einer Textdatei geladen...

Nun kommt aber dieser Fehler...
1. Was hat die Zeile mit Access Violation zu tun?
2. Was kann ich in zukunft mit "Access Violation"s anfangen?
3. Was gibt es prinzipiell für möglichkeiten, dass so ein Fehler auftritt in verbindung mit Tmemo und Tstringlist?


Narses - So 05.11.06 00:50

Moin!

So ein (Laufzeit-)Fehler ist nichts, was man allgemein und für immer beheben kann.

Aufgrund der Adresse rate ich mal, dass zu dem Zeitpunkt, zu dem die Zeile ausgeführt wird, entweder in Mem1 oder in Liste ein NIL drin steht (sprich: das Objekt nicht initialisiert ist).

Warum das passiert, kann ich dir ohne den restlichen Quelltext nicht sagen. Und was man allgemein dagegen tun kann: keine Programmierfehler machen. :mrgreen: ;)

cu
Narses


pupu - So 05.11.06 01:01

hmmm

Hätt ja sein können dass "Access Violation" was bestimmtes ausdrücken soll...
Also wenn ich liste[0] ma watche (Strg+Alt+W) steht da genau das drin was drin stehn soll...nämlich die erste zeile aus der textdatei.

Und in das Memo1 soll ja was reingeschrieben werden also is doch egal was drinsteht und initialisiert is es denk ich ma ^^ zumindest is es auf der Form und so ;) oder was is genau mit initialisiert gemeint?

Den ganzen text kann ich kaum posten weil das irgendwie dann alles sein kann ;)
ich poste mal hier die prozedur in der liste initialisiert wird mit dazu
Also das ganze:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.ffnen1Click(Sender: TObject);
var liste:TStringlist;
begin
  if Form1.oeffnen.Execute then
    begin
      liste:=TStringlist.Create;
      liste.LoadFromFile(oeffnen.filename);
    if liste[liste.count-1]<>'ja' then
      passwortcheck(true,liste)
    else
      begin
        Application.CreateForm(TForm4, Form4);
        Form4.Showmodal;
      end;
    end;
end;

procedure TForm1.passwortcheck(valid:boolean; liste:TStringlist);
var n:integer;
begin
  with Form4 do
  begin
    memo1.Text:=liste[0];
    if valid then
      begin
        combobox1.itemindex:=strtoint(liste[liste.count-4]);
        case combobox1.itemindex of 0: spinedit1.value:=strtoint(liste[liste.count-2]);
                                    1: spinedit1.Value:=-strtoint(liste[liste.count-2]);
                                    3: ed_muster.text:=liste[liste.count-2];
         end;
      end;
  checkmodus(valid);
  end;
end;

in Zeile 23 hört er dann auf :?

den sinn dahinter versteht man erst wenn man das pogramm kennt...hab aber kb das jetzt zu erklären (zumahl das irrelevant is ;) )


Narses - So 05.11.06 01:06

Moin!

Nur aufgrund dieser Zeile kann ich dir nicht mehr sagen, wo der Fehler herkommen könnte; das sind IMHO schon alle Möglichkeiten, da der Code ja nicht gerade als "komplex" zu bezeichnen ist... :D

Fazit: Mehr Code. ;)

cu
Narses


Narses - So 05.11.06 01:09

Moin!

Da haben wir´s doch schon: du greifst auf Form4 zu, obwohl es noch gar nicht initialisiert ist (das kommt ja erst später). Fazit: genau der Fehler, den ich aufgezeigt habe: Memo1 enthält ein NIL. :D

cu
Narses


pupu - So 05.11.06 01:33

-.- ich hasse solche fehler die so offensichtlich sind und man schaut die ganze zeit dran vorbei

edit: ok ich glaub ich muss was an meinen "with-do" gewohnheiten ändern ;) sonst kommts nur zu komplikationen...