Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - problem bei klassen mit zeiger-attribut
obbba - Fr 09.02.07 22:13
Titel: problem bei klassen mit zeiger-attribut
Bei folgendem code bekomme ich einen Fehler durch "Zugriffsverletzung", wenn ich auf den Button3 klicke.
Ich verstehe das nicht. Die 3. Prozedur funktioniert doch ähnlich wie die 2. .
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: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type pint= ^Integer;
tc = class public p: pint; end;
TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private p,p2: Pint; i: integer; op: tc; public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); begin i := 333; p := @i; caption := inttostr(p^); end;
procedure TForm1.Button2Click(Sender: TObject); begin new(p2); p2^:=4; caption:=inttostr(p2^); dispose(p2); end;
procedure TForm1.Button3Click(Sender: TObject); begin new(op.p); (op.p)^:= 1234; caption := inttostr((op.p)^); dispose(op.p); end;
end. |
Marco D. - Fr 09.02.07 22:14
Du musst imho von op erst eine Objektinstanz erstellen :!:
obbba - Fr 09.02.07 22:18
Marco D. hat folgendes geschrieben: |
| Du musst imho von op erst eine Objektinstanz erstellen :!: |
Falls du meinst was ich denke, ist das in Zeile 28 geschehen.
obbba - Fr 09.02.07 22:44
So aus Prinzip halt.
Ursprünglich wollte ich eine Klasse für Listen (Linked List) machen.
Aber vieleicht gibts da von Delphi auch schon was vorgefertigtes?
Noch was:
Solche Fehlermeldungen kommen nicht allein, sondern in Gruppen, wenn ich versuche das fehlerhafte Programm zu beenden und es neu zu kompilieren.
Meistens muss ich auch Delphi neustarten.
Geht das auch einfacher?
obbba - Sa 10.02.07 00:39
Soll ich am Ende destroy auch aufrufen?
Christian S. - Sa 10.02.07 00:43
Wenn Du die Instanz nicht mehr brauchst, solltest Du Free aufrufen. Im Endeffekt ruft das auch Destroy auf, prüft aber vorher noch, ob die Instanz noch existiert. Du bekommst also eine Abfrage kostenlos dazu, ohne eine Zeile mehr zu zahlen :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!