![]() |
EAccessViolation Fehler
Hi,
bin grad dabei für die Delphi Arbeit am kommenden Dienstag zu lernen. Wir sollten ein Programm erstellen, dass die Fläche und den Umfang von Quadrat, Rechteck und Kreis errechnet. Bisher habe ich aber nur das Rechteck. Allerding komm ich immer wieder zum selben Fehler. Ich hoffe jemand kann mir helfen. Vielen Dank.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit_GeoObjekte; type TForm1 = class(TForm) E_Laenge: TEdit; E_Breite: TEdit; B_Rechteck: TButton; E_Flaeche: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; E_Umfang: TEdit; Label6: TLabel; Label7: TLabel; E_Radius: TEdit; B_Kreis: TButton; Label8: TLabel; Label9: TLabel; E_Quadrat: TEdit; B_Quadrat: TButton; procedure FormCreate(Sender: TObject); procedure B_RechteckClick(Sender: TObject); procedure B_KreisClick(Sender: TObject); procedure B_QuadratClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; geo: TGeo; rechteck: TRechteck; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin rechteck := rechteck.Create(100,100); end; procedure TForm1.B_RechteckClick(Sender: TObject); var Laenge, Breite: single; begin Laenge:= strtofloat(E_Laenge.Text); Breite:= strtofloat(E_Breite.Text); rechteck.SetL(Laenge); rechteck.SetB(Breite); rechteck.BerechneF; rechteck.BerechneU; E_Flaeche.Text:=floattostr(geo.GetF); end; procedure TForm1.B_KreisClick(Sender: TObject); begin // end; procedure TForm1.B_QuadratClick(Sender: TObject); begin // end; end.
Delphi-Quellcode:
[edit=SirThornberry]Zitat-Tags durch Delphi-Tags ersetzt. Mfg, SirThornberry[/edit][size=18]
unit Unit_GeoObjekte;
interface type TGeo = class (TObject) protected FFlaeche: single; FUmfang: single; public procedure BerechneF; virtual; abstract; procedure BerechneU; virtual; abstract; function GetU: single; function GetF: single; end; TRechteck= class(TGeo) protected FLaenge, FBreite: single; public procedure BerechneF; override; procedure BerechneU; override; procedure SetL(Neu_Laenge: single); procedure SetB(Neu_Breite: single); virtual; constructor Create(Laenge, Breite: single); end; implementation function TGeo.GetF: single; begin result:= FFlaeche; end; function TGeo.GetU: single; begin result:= FUmfang; end; constructor TRechteck.create(Laenge, Breite: single); begin inherited create; FLaenge:= Laenge;<------ hier kommt der Fehler jetzt FBreite:= Breite; end; procedure TRechteck.SetL(Neu_Laenge: single); begin FLaenge:= Neu_Laenge;<------ hier kam der Fehler vorher end; procedure TRechteck.SetB(Neu_Breite: single); begin FBreite:= Neu_Breite; end; procedure TRechteck.BerechneF; begin FFlaeche:= FLaenge * FBreite; end; procedure TRechteck.BerechneU; begin FUmfang:= 2 * (FLaenge + FBreite); end; end. |
Re: EAccessViolation Fehler
entweder ich hab es eifnach übersehen oder du hast vergessen Instanzen von TRechteck etc. zu erstellen (rechteck := TRechteck.Create). Das Freigeben der Instanzen würde dann auch fehlen.
Es wäre auch interessant zu wissen an welcher Stelle der Fehler um die Ursache einzugrenzen. Generell kommt eine AccessViolation (Zugriffsverletzung) immer wenn du auf Speicher falsch zugreifst oder auf Speicher der nicht zu deinem Programm gehört (lässt sich auch einiges über die Suchfunktion finden). Achja, Herzlich Willkommen in der DP :party: |
Re: EAccessViolation Fehler
Danke für die schnelle Antwort.
Allerdings hat sich der Fehler jetzt nur von der einen zur anderen Stelle verschoben (habe es oben editiert). Ich weiss so langsam echt nicht mehr weiter. Es liegt immer an einem bescheuerten Fehler :( |
Re: EAccessViolation Fehler
An welcher Stelle kommt denn genau der Fehler. Und an welcher Adresse kommt die AccessViolation.
|
Re: EAccessViolation Fehler
Zitat:
Zitat:
Zitat:
|
Re: EAccessViolation Fehler
Die Adresse deutet darauf hin das du irgendwo "TIrgendwas.Create" vergessen hast.
|
Re: EAccessViolation Fehler
Zitat:
So langsam nervt mich das echt. |
Re: EAccessViolation Fehler
wie ist dein code jetzt genau?
Du hast auch rechteck := Trechteck.Create(100,100); in deinem code stehen? Mfg frank |
Re: EAccessViolation Fehler
nein, hat er nicht. Und durch debuggen wäre es auch einfach zu finden. Wäre ja mal ein guter Einstieg mit dem
![]() |
Re: EAccessViolation Fehler
Danke für eure Tipps, aber das Problem lag komischerweise daran, dass ich den Constructor benutzt habe. Nun funktioniert es, auch mit Quader und Kreis. Trotzdem beim nächsten Programm kommt der nächste Thread :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 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