![]() |
Acess Violation
Hi,
Ich habe ein problem, undzwar scheint mein Projekt, wenn ich es kompiliere, ohne einen wirklichen Grund eine Access-violation auszulösen. eigentlich habe ich nichts geändert, denn ich habe das was ich neu geschrieben hatte, auskommentiert, aber die access-violation tritt immernoch auf. ich weiss jetzt nicht welchen code ich hier posten soll, da der fehler auch sofort auftritt, ich kann das programm nicht in einzelnen schritten starten, daher weiss ich auch nicht, wo die kritische stelle ist. hat jemand nen rat für mich? braucht ihr noch infos, wenn ja welche? Danke schonmal! |
Re: Acess Violation
die genaue Meldung wäre interessant (also inklusive aller genannten Adressen)
|
Re: Acess Violation
Am besten, man startet es in der IDE und setzte einzelne Breakpoints, um weiter an die Stelle zu kommenm, wo das Programm dann den Fehler bringt. Oder ist es nicht immer an der gleichen Stelle?
|
Re: Acess Violation
Ich hatte einen vergleichbaren Effekt als ich im letzten Jahr von Delphi 6 auf Delphi 2009 umgestellt habe.
Da waren im Projekt Verweise auf Komponenten und deren Source, die nicht zu Delphi 2009 passten. Die Exceptions traten schon vor der initialize-Klausel meiner Anwendung auf und wurden in den initialize-Abschnitten der Komponenten erzeugt. Hast Du den Source selbst ganz neu erstellt oder etwas schon Vorhandenes genommen, was für Komponenten wurden verwendet etc.? Vielleicht findest Du da etwas, was Du rauswerfen kannst, solange bis Dein vorheriges (oder leeres) Programm funktioniert. Grüße, Messie Edit: hier das ![]() |
Re: Acess Violation
ok, ich hab das gemacht und jetzt hab ich die stelle gefunden wo der (ziemlich irrationale) fehler zu liegen scheint:
Delphi-Quellcode:
ich hab jetzt die variablen überwacht und habe rausbekommen, dass k und l beim start der schleifen den wert 10 und 20 bekommen, und dann anfangen runterzuzählen, bei k=20 und l=19 bricht er dann mit der fehlermeldungtype TLabelfeld = array[0..13,0..23] of TImage; //TVorschaufeld = array[0..3,0..3] of TImage; var Form1: TForm1; Labelfeld: TLabelfeld; //vorschau1,vorschau2,vorschau3,vorschau4 : TVorschaufeld; go: boolean; implementation {$R *.dfm} {$R res.res} procedure TForm1.FeldBauen; var i,j:byte; k,l:integer; begin for i:=1 to 10 do begin for j:=1 to 20 do begin labelfeld[i,j]:=TImage.Create(GroupBox3); labelfeld[i,j].Parent:=GroupBox3; labelfeld[i,j].left:=i*15+3; labelfeld[i,j].top:=j*15+7; labelfeld[i,j].width:=14; labelfeld[i,j].height:=14; end; end; LastTetrisfeld:=TTetrisfeld.create; Tetrisfeld:=TTetrisfeld.create; stein:=Tetrisfeld.SteinRandomcreate; tetrisfeld.pause:=true; k:=1; l:=1; for k:=1 to 10 do begin for l:=1 to 20 do begin labelfeld[k,l].Picture.Bitmap.LoadFromResourceName(HInstance, 'bg'); end; end; end; 'access violation at 0x00405b35: write of adress 0x00030cf4' ab. verstehe nicht warum er plötzlich rutnerzählt o.O k:=1 und l:=1 scheint der compiler nicht zu beachten, ich kann dort aufjedenfall keinen breakpoint setzen, das wird so komisch grün dann die zeile... naja, diese stelle vom code hat übrigens immer funktioniert, hab da nix geändert und jetzt kommt plötzlich der fehler da... kann mir noch wer helfen? DANKE schonmal im Vorraus... edit: nein, hab alles selbst geschrieben und benutze delphi 7 |
Aussagekräftiger Titel
Bitte gib deinem Beitrag einen aussagekräftigen Titel. Der jetzige Titel lässt nicht erkennen, um was für ein Problem oder Frage es sich handelt. Um den Titel zu ändern, editiere einfach deinen ersten Beitrag. Damit erleichterst du das Auffinden deines Beitrages mit der Suche und ersparst anderen Mitglieder ein unnötiges Öffnen deines Beitrages.
|
Re: Aussagekräftiger Titel
Zitat:
|
Re: Acess Violation
Zitat:
Schalte zum Debuggen am besten mal die Optimierung aus. Existiert Groupbox3 zu dem Zeitpunkt überhaupt schon (Groupbox3 ist nebenbei gesagt nicht der beste Name). |
Re: Acess Violation
Das der Optimierer for-Schleifen umstellt, so daß diese gegen 0 zählen ist normal und keine Fehlerursache.
Zitat:
Der Compiler warnt dich normalerweise und der Optimierer schmeist die Zeilen raus, die werden nicht übersetzt. Wenn du etwas debuggen willst, schalt den Optimierer aus und erstelle das ganze Projekt erst enmal neu. Du solltest auch alle Warnung anschalten. Interssant wäre jetzt, wo wird FeldBauen überhaupt aufgerufen, existiert das Formular überhaupt schon? |
Re: Acess Violation
Zitat:
(Übrigens ist es zumindestens während der Entwicklung sinnvoll, die Bereichsprüfung [Projektoptionen] einzuschalten, dann kommen auch aussagekräftige Fehlermeldungen) edit: warum nutzt Du eigentlich einmal i und j und dann k und l um auf das Array zuzugreifen? Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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 by Thomas Breitkreuz