| Autor |
Beitrag |
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 18.11.09 11:14
Martok hat folgendes geschrieben : | | 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 
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 18.11.09 18:21
Könnt ihr euch einigen? HelgeLange und jaenicke sagen beide was anderes. Ich probiere noch mal rum.
Aber wie Martok 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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| 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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 18.11.09 18:44
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Dude566 
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 18.11.09 18:50
Ja das ist traurig aber wirklich wahr, deshalb finden wir oft Fehler erst spät oder garnicht.
Hier der komplette Code:
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..5] of TRing; public constructor Create; destructor Destroy; end;
implementation
constructor TContainer.Create; var i : integer; begin for i := 1 to 5 do Item[i] := TRing.Create; end;
destructor TContainer.Destroy; var i : integer; begin for i := 1 to 5 do Item[i].Destroy; end;
end. |
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; farbe : TColor; x1,y1,x2,y2 : integer; public constructor Create; destructor Destroy; procedure Init; procedure SetStaerke(dicke : integer); function GetStaerke : integer; procedure SetFarbe (stiftfarbe : TColor); function GetFarbe : TColor; 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
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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 
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Do 19.11.09 00:22
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 19.11.09 01:21
Ich rate einmal (da du den Quelltext davon nicht postest):
Du erzeugst dein TContainer so... Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| var Container: TContainer; begin Container.Create; ... 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 
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Do 19.11.09 17:15
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Do 19.11.09 19:16
Ist halt ein Laufzeitfehler 
_________________ Die Lösung ist nicht siebzehn.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 20.11.09 00:50
|
|
|