Autor Beitrag
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 18.11.09 11:14 
user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Debugging lernt man in der Schule nicht.
Da hast du sicher Recht, dafür gibt es aber genug Tutorials wie dieses:
www.delphi-treff.de/delphi-ide/debugger/
Dude566 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 18.11.09 18:21 
Könnt ihr euch einigen? user profile iconHelgeLange und user profile iconjaenicke sagen beide was anderes. Ich probiere noch mal rum.

Aber wie user profile iconMartok schon sagte, lernt man nie Debugging, die Lehrer selbst könnens ja meistens nicht mal.

Edit: Habe mir jetzt mal schnell das Tutorial von meinem Vorposter angeschaut und bin den Text mal mit F7 Zeilenweise durchgegangen.

An einer Stelle komme ich dann nicht weiter und es kommt die Zugriffsverletzung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
// Constructor
constructor TContainer.Create;
var
   i : integer;
begin
     for i := 1 to 5 do
         Item[i] := TRing.Create;
end;

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.


Zuletzt bearbeitet von Dude566 am Mi 18.11.09 18:45, insgesamt 1-mal bearbeitet
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 18.11.09 18:44 
user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Könnt ihr euch einigen? user profile iconHelgeLange und user profile iconjaenicke sagen beide was anderes. Ich probiere noch mal rum.

Der destructor heißt Destroy, ja. Diesen ruft man aber nicht direkt auf, sondern benutzt .Free

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Aber wie user profile iconMartok schon sagte, lernt man nie Debugging, die Lehrer selbst könnens ja meistens nicht mal.

Das ist traurig.. wie suchen die selber denn dann Fehler? Fragen die auch im Forum nach? :D

Könntest du bitte nochmal den aktuellen Code von beiden Klassen posten?

_________________
PROGRAMMER: A device for converting coffee into software.
Dude566 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Mi 18.11.09 18:50 
Ja das ist traurig aber wirklich wahr, deshalb finden wir oft Fehler erst spät oder garnicht. :roll: :autsch:

Hier der komplette Code:
ausblenden volle Höhe 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:
unit uTContainer;

interface

uses uTRing, Graphics;

type TContainer = class(TObject)
     private
       Item : array [1..5of TRing;   // Instanzen(Objekte) von Klasse TRing
     public
       constructor Create;
       destructor Destroy;
end;

implementation

// Constructor
constructor TContainer.Create;
var
   i : integer;
begin
     for i := 1 to 5 do
         Item[i] := TRing.Create;
end;

// Destructor
destructor TContainer.Destroy;
var
   i : integer;
begin
     for i := 1 to 5 do
         Item[i].Destroy;
end;

end.


ausblenden volle Höhe 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:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
unit uTRing;

interface

uses Graphics;

type TRing = class(TObject)
     private
       stift : integer;         // Variable für Stiftdicke
       farbe : TColor;          // Variable für Stiftfarbe
       x1,y1,x2,y2 : integer;   // Variablen für Ringposition
     public
       constructor Create;
       destructor Destroy;
       procedure Init;
       procedure SetStaerke(dicke : integer);  // Stiftdicke setzen
       function  GetStaerke : integer;         // Stiftdicke ausgeben
       procedure SetFarbe (stiftfarbe : TColor);   // Stiftfarbe setzen
       function  GetFarbe : TColor;                // Stiftfarbe ausgeben
       procedure SetPosition(ObenLinksX,ObenLinksY,UntenRechtsX,UntenRechtsY : integer);
       procedure Zeichnen (myCanvas : TCanvas);
     end;

implementation

procedure TRing.SetStaerke(dicke : integer);
begin
     stift := dicke;
end;

function TRing.GetStaerke : integer;
begin
     result := stift;
end;

procedure TRing.SetFarbe (stiftfarbe : TColor);
begin
     farbe := stiftfarbe;
end;

function TRing.GetFarbe : TColor;
begin
     result := stift;
end;

procedure TRing.SetPosition(ObenLinksX,ObenLinksY,UntenRechtsX,UntenRechtsY : integer);
begin
     x1 := ObenLinksX;
     y1 := ObenLinksY;
     x2 := UntenRechtsX;
     y2 := UntenRechtsY;
end;

procedure TRing.Zeichnen (myCanvas : TCanvas);
begin
     myCanvas.Pen.Color := GetFarbe;
     myCanvas.Pen.Width := GetStaerke;
     myCanvas.Ellipse(x1,y1,x2,y2);
end;

constructor TRing.Create;
begin
     Init;
end;

destructor TRing.Destroy;
begin
     inherited;
end;

procedure TRing.Init;
begin
     SetStaerke(3);
     SetFarbe(clLime);
     SetPosition(50,50,150,150);
end;

end.

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 18.11.09 20:31 
Tut bei mir, abgesehen von zwei Compilerwarnungen, einwandfrei.
Wie erzeugst du das ganze?
In welcher Zeile bleibt Delpi stehen, wenn der Fehler auftritt?

_________________
PROGRAMMER: A device for converting coffee into software.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 18.11.09 23:03 
Zur Erklärung ggf. mal folgende (konventionellen) Regeln:
1. In einem Construktor sollte inherited Create; die erste Zeile nach dem Begin sein. Dies ändert sich nur, wenn für diesen Aufruf lokale Variablen oder andere Dinge vorzubereiten sind. Bis zu diesem Zeitpunkt sind Zugriffe auf Instanz-Variablen aber absolutes Tabu!

2. In einem Destructor mit Namen Destroy ist die Letzte Zeile vor dem End der Aufruf der Vorfahrklasse. Diese Konvention ist hier zwingend, da es danach keine weiteren Aufgaben mehr gibt.

3. (wurde aber schon gesagt): Der Aufruf von Destroy erfolgt indirekt über die Methode Free.

Anmerkungen:
- Zum Überschreiben des Konstruktors bei TObject benötigt man das Methoden-Flag reintroduce;. Siehe Hilfe für mehr Informationen dazu.
- Construcotr und Destructor erzeugen intern spezielle Aufruf-Konventionen, bei denen neben den eigentlichen Argumenten auch weitere Daten übergeben. Diese regeln u.a. ob die Methode NewInstance aufgerufen wird, die den Speicher alloziiert. Eine genaue Erklärung führt hier zu weit.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Dude566 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Do 19.11.09 00:22 
user profile iconXentar hat folgendes geschrieben Zum zitierten Posting springen:
Tut bei mir, abgesehen von zwei Compilerwarnungen, einwandfrei.
Wie erzeugst du das ganze?
In welcher Zeile bleibt Delpi stehen, wenn der Fehler auftritt?


ausblenden Delphi-Quelltext
1:
2:
 for i := 1 to 5 do
Item[i] := TRing.Create;


Beim Create bricht mein Programm dann ab...

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 19.11.09 01:21 
Ich rate einmal (da du den Quelltext davon nicht postest):
Du erzeugst dein TContainer so...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  Container: TContainer;
begin
  Container.Create;
  ...
  // oder:
  Container := Container.Create;
Also eben nicht das Create der Klasse sondern der (nicht existenten) Instanz der Klasse. Da fehlt also das T vermute ich.
Dude566 Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Do 19.11.09 17:15 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  Container: TContainer;
begin
  Container.Create;
  ...
  // oder:
  Container := Container.Create;


Voll ins Schwarze :oops: :oops: , ich habe in meiner main.pas die erste Variante die du gepostet hast geschrieben, also wurde garkeine Instanz des Objekts TContainer erstellt. :autsch:
Sowas blödes! :autsch:

Aber warum wurde mir dann nicht schon dort ein Fehler angezeigt, ich meine der Compiler müsste das doch erkennen, wenn ich dort einfach komplett falsch ein Create für das Objekt aufrufe. :?

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Do 19.11.09 19:16 
Ist halt ein Laufzeitfehler :zwinker:

_________________
Die Lösung ist nicht siebzehn.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 20.11.09 00:50 
user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Aber warum wurde mir dann nicht schon dort ein Fehler angezeigt, ich meine der Compiler müsste das doch erkennen, wenn ich dort einfach komplett falsch ein Create für das Objekt aufrufe. :?
Sofern es eine lokale Variable ist, sollte eine Warnung kommen, dass die Variable evtl. nicht initialisiert ist. Wenn es aber eine globale ist, hat der Compiler keinerlei Möglichkeit zu erkennen, ob da nicht irgendwoher schon ein Objekt drin ist. ;-)