AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Acess Violation

Ein Thema von Morphy · begonnen am 25. Mär 2010 · letzter Beitrag vom 26. Mär 2010
Antwort Antwort
Morphy

Registriert seit: 25. Mär 2010
3 Beiträge
 
#1

Acess Violation

  Alt 25. Mär 2010, 19:51
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!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Acess Violation

  Alt 25. Mär 2010, 19:56
die genaue Meldung wäre interessant (also inklusive aller genannten Adressen)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#3

Re: Acess Violation

  Alt 25. Mär 2010, 19:58
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?
Matthias
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Acess Violation

  Alt 25. Mär 2010, 20:19
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 Thema von damals
  Mit Zitat antworten Zitat
Morphy

Registriert seit: 25. Mär 2010
3 Beiträge
 
#5

Re: Acess Violation

  Alt 25. Mär 2010, 20:23
ok, ich hab das gemacht und jetzt hab ich die stelle gefunden wo der (ziemlich irrationale) fehler zu liegen scheint:

Delphi-Quellcode:
  
type 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;
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 fehlermeldung

'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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Aussagekräftiger Titel

  Alt 25. Mär 2010, 20:25
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Morphy

Registriert seit: 25. Mär 2010
3 Beiträge
 
#7

Re: Aussagekräftiger Titel

  Alt 25. Mär 2010, 20:26
Zitat von Luckie:
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.
ich weiss nicht genau wie mein problem heisst hast du nen vorschlag für nen aussagekräftigen titel?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Acess Violation

  Alt 25. Mär 2010, 22:05
Zitat:
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 fehlermeldung
Irgendetwas stimmt an der Aussage nicht. Wenn k bei 10 startet und dann runtergezählt wird, wie kann k dann 20 sein?

Schalte zum Debuggen am besten mal die Optimierung aus.
Existiert Groupbox3 zu dem Zeitpunkt überhaupt schon (Groupbox3 ist nebenbei gesagt nicht der beste Name).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#9

Re: Acess Violation

  Alt 26. Mär 2010, 08:21
Das der Optimierer for-Schleifen umstellt, so daß diese gegen 0 zählen ist normal und keine Fehlerursache.
Zitat von Morphy:
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...
Die Zuweisung ist blödsinn, da die nachfolgenden Zuweisungen in den for-Schleifen den Wert wieder überschreiben.
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?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Acess Violation

  Alt 26. Mär 2010, 15:42
Zitat von Morphy:
Delphi-Quellcode:
  

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;
var i,j:byte; das ist spätestens hier: labelfeld[i,j].top:=j*15+7; nicht mehr so gülden, da 15*20 ein wenig größer als 255 ist, oder spekulierst Du auf irgendwelche Nebeneffekte, die ich nicht sehe?
(Ü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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz