Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DFM(?)- Fehler (https://www.delphipraxis.net/79067-dfm-fehler.html)

E307 15. Okt 2006 20:15


DFM(?)- Fehler
 
Seit einiger Zeit treten bei einem meiner Delphi-Projekte setsame Zugriffsverletzungen auf, die mal da sind, mal nicht (meistens nach einem PC-Neustart). Besonders beliebt bei Delphi ist die Verletzung an Adresse '000000' in modul '000000', die während der Laufzeit und immer beim Beenden des Projektes, wenn das Programm nicht läuft, auftritt. :wall: Manchmal stürtzt auch gleich der ganze Computer ab. :evil: Ich glaube inzwischen, das irgendetwas mit der *.DFM- Datei des MainFormulars nicht stimmt. Gibt es vielleicht ein Tool, was die Dateien überprüft und repariert?

Bernhard Geyer 15. Okt 2006 20:19

Re: DFM(?)- Fehler
 
Wenn selbst der Komplette Rechner abstürzt würde ich fast auf einen HW-Defekt tippen.
Besorg dir mal die Diagnose-CD der c't und lass diverse Lasttest auf RAM, HD etc. durchlaufen.

Balu der Bär 15. Okt 2006 20:20

Re: DFM(?)- Fehler
 
Wie kommst du denn zu dieser Vermutung? :gruebel:

Sonst öffne die *.dfm einfach mit einem Texteditor und guck sie dir an. :gruebel:

Ich glaube nicht das es was damit zu tun hat. ;)

E307 15. Okt 2006 20:41

Re: DFM(?)- Fehler
 
Zitat:

Wie kommst du denn zu dieser Vermutung?

Sonst öffne die *.dfm einfach mit einem Texteditor und guck sie dir an.

Ich glaube nicht das es was damit zu tun hat.
Ganz einfach: Am Quelltet kanns ja nicht liegen und alles andere (.res;.cfg;.bdsproj.local) habe ich neu erstellt.

Außerdem kommt der, falsch, die Fehler immer auch zur Entwicklungszeit, wenn delphi2005 nich vorjer nach der 000000- Zugriffsverletzung selber abstürtzt.

TStringlist 15. Okt 2006 21:08

Re: DFM(?)- Fehler
 
Die häufigsten Gründe für diese AVs sind:

1. Man hat irgendwelche Componenten, die man dynamisch erzeugt hat, dann in FormDestroy vergessen zu free'n.

2. Man versucht in FormDestroy eine Komponente zu free'n (auch indirekt), die man aber irgendwo/wie vorher schon ge'free't hat.

Also diesbezüglich event. nochmal genau durchchecken.

Namenloser 15. Okt 2006 21:29

Re: DFM(?)- Fehler
 
Oder man hat auf dem formular eine Komponente, die mit einer anderen Komponente, die man gelöscht hat,"verknüpft" ist.

Also in der Art:

Form1.Menu | MainMenu1

Dann Mainmenu1 gelöscht und *ZACK*


(Die meisten Komponenten fangen den fehler allerdings irgendwie ab)

Trotzdem ist mir mal das neulich mit einer Action.Toolbar so ergangen. Da ging plötzlich gar nix mehr :|

E307 16. Okt 2006 11:49

Re: DFM(?)- Fehler
 
Die Fehler treten auf, seit ich Zwei verknüpfte Komponenten entfernt habe!

Zitat:

Die häufigsten Gründe für diese AVs sind:

1. Man hat irgendwelche Componenten, die man dynamisch erzeugt hat, dann in FormDestroy vergessen zu free'n.

2. Man versucht in FormDestroy eine Komponente zu free'n (auch indirekt), die man aber irgendwo/wie vorher schon ge'free't hat.

Also diesbezüglich event. nochmal genau durchchecken.
Das habe ich schon mehr als gründlich gemacht! Die Zugriffsverletzungen treten bei (fast) allen Komponenten des Projektes (Paintboxen,Labels, etc.) auf. Irgendwas läuft da schief.

:?: Kann es sein, dass ich zu viele TBitmap Variablen (ca. 10 stück) erstellt habe?

Neulich hatte ich bei dem Projekt einen "Stack-Überlauf". Was ist das genau?

Namenloser 16. Okt 2006 12:46

Re: DFM(?)- Fehler
 
Sind sie wirklich alle mit Create erzeugt?

Auf welche Variablen/Objekte greifen denn all diese Komponenten zu? // Edit: die Labels etc...

Es könnte auch (z.b.) an der OnPaint-Routine des Formulars liegen.

Da könnte ja z.b. sowas stehen:
Delphi-Quellcode:
procedure TForm1.FormPaint;
  { ... }
  paintbox1.width := 100;
  bitmap := tBitmap.Create; // Globales TBitmap-Objekt
  { ... }
wenn dann in der TPaintbox.onpaint dies stünde:
Delphi-Quellcode:
  { ... }
  paintbox1.canvas.draw(0,0,bitmap);
  { ... }
Dann würde auf eine noch nicht erzeugtes Objekt zugegriffen.
Es käme also zu einer Zugriffsverletzung. (Und außerdem zum unten genannten Fehler ;))


Hast du mal Haltepunkte gesetzt?

PS: Zitat aus der Onlinehilfe:
Zitat:

EStackOverflow wird ausgelöst, wenn das System den erforderlichen Stack-Speicher nicht zuweisen kann. Mögliche Gründe sind extrem große lokale Variablen, [b]eine große Rekursionstiefe[b] oder unzulässiger Machinencode.
Das ist die häufigste Ursache. das könnte beispielsweise passieren, wenn du in der OnPaint.Routine des Formulars so etwas schreibst:
Delphi-Quellcode:
Button1.width := 100;
daraufhin würde der Button und damit auch das Formular neugezeichnet, wobei der code immer wieder und wieder ausgeführt werden würde. Das führt nach einiger Zeit zu einem "Stack-Überlauf".

E307 16. Okt 2006 13:15

Re: DFM(?)- Fehler
 
Ein Label (Label1) wird im 250ms- Takt mit neuen Werten beschrieben, die Prozedur zum zeichnen (Per Timer im 100ms Takt):
Delphi-Quellcode:
procedure TForm1.draw_map;
var
  i, j: Integer;
begin
  for i := 0 to breite do
    for j := 0 to hoehe do
    begin
      case map[i, j] of          //Map ist ein Array
        -1: bmp := picture[1];
         0: bmp := picture[0];
         -3: bmp := picture[3];
        -4: bmp := picture[4];
        -5: bmp := picture[5];
        -6: bmp := picture[6];
        -7: bmp := picture[7];
        -8: bmp := picture[8];
        -9: bmp := picture[9];
      else
        bmp := picture[2];
      end;
     PaintBox1.Canvas.Draw(i*raster, j*raster,TGraphic(bmp));
    end;
end;
Und der Timer mit der fraglichen Labelbeschriftung:
Delphi-Quellcode:
procedure TForm1.TimerTimer(Sender: TObject);
begin
Label1.Caption:=IntToStr(XTime);

dec(XTime);
end;
Beim klick auf einen Button wir das Label zusätzlich verschoben: TimeLabel.Left:=584; .
Ich hab das mal auskommentiert, alles lief ohne Fehler, beim beenden des Programms gabs wieder ne Zugriffsverletzung.

Namenloser 16. Okt 2006 13:54

Re: DFM(?)- Fehler
 
Delphi-Quellcode:
PaintBox1.Canvas.Draw(i*raster, j*raster,TGraphic(bmp));
Lass die Umwandlung in TGraphic weg.

Kann es sein, dass du in formdestroy (oder was auch immer) erst das array freigibst und dann bmp?

(oder Umgekehrt)

PS:
Delphi-Quellcode:
case map[i, j] of
  -1: bmp := picture[1];
   0: bmp := picture[0];
  -3: bmp := picture[3];
  -4: bmp := picture[4];
  -5: bmp := picture[5];
  -6: bmp := picture[6];
  -7: bmp := picture[7];
  -8: bmp := picture[8];
  -9: bmp := picture[9];
else
  bmp := picture[2];
Wieso Minuszahlen? Wären positive Zahlen nicht praktischer? o.O

jedenfalls würde ich das (wenn es denn unbedingt Minuszahlen sein müssen) lieber so machen:
Delphi-Quellcode:
 
if map[i, j] in [-1,0,-3..-9] then
  bmp := picture[-map[i, j]]
else
  bmp := picture[2];

E307 16. Okt 2006 14:34

Re: DFM(?)- Fehler
 
Ich habe inzwischen festgestellt: Immer wenn ich ein neues Objekt einfüge, gibt es beim neu eingefügten Objekt Probleme. Beispiel: Ich füge eine PaintBox ein, aber jeder zeichenversuch gibt es Zugriffsverletzungen! Dan füge ich nen Button ein, die PaintBox funktioniert jetzt, aber der neue Button ist unbrauchbar. Wenn ich den wieder lösche, ist die Paintbox das zuletzt erstellte Objekt und es gibt wieder beim zeichnen Zugriffsverletzungen. :wall: :wall: :wall: :wall:

Balu der Bär 16. Okt 2006 14:57

Re: DFM(?)- Fehler
 
Schonmal ein eine Delphi-Neuinstallation gedacht?

E307 16. Okt 2006 16:05

Re: DFM(?)- Fehler
 
Zitat:

Schonmal ein eine Delphi-Neuinstallation gedacht?
Warum?

mkinzler 16. Okt 2006 16:08

Re: DFM(?)- Fehler
 
Zitat:

Zitat von E307
Zitat:

Schonmal ein eine Delphi-Neuinstallation gedacht?
Warum?

Recht hast du! Nur weil die Installation fehlerhaft ist, gibt es noch lange keinen Grund für eine Neuinstallation! :mrgreen:

Balu der Bär 16. Okt 2006 16:08

Re: DFM(?)- Fehler
 
Hups, ich dachte es würde alle Projekte betreffen. :oops:

Manchmal wirkt sowas aber wirklich wunder. :zwinker:
Oder du hängst das Projekt mal hier an damit andere gucken können ob es bei ihnen auch zu diesem Fehlern kommt.

E307 16. Okt 2006 16:30

Re: DFM(?)- Fehler
 
Woran seht ihr, dass die Installation fehlerhaft ist, wenn der Fehler nur in einem Projekt auftritt? Ich installier's trotzdem mal neu, weil vorher eine Turbo-Version installiert war. Vielleicht verträgt sich das nicht. (die turbo ist aber wieder deinstalliert.)

Balu der Bär 16. Okt 2006 16:31

Re: DFM(?)- Fehler
 
Woran siehst du das es an der *.dfm liegt? :roll:

Ohne genauere Informationen wie z.B. das Projekt kann man hier ja nur spekulieren.

E307 16. Okt 2006 17:19

Re: DFM(?)- Fehler
 
Zitat:

Ohne genauere Informationen wie z.B. das Projekt kann man hier ja nur spekulieren.
Dann hier mal der Quellcode:
Serpens.zip

Nochwas zum Projekt: Vor ca. 10 Monaten habe ich das Projekt geschrieben, ein Snake-Klon zum üben mit Canvas. Dann habe ich jetzt das Projekt wieder aus der "Versenkung" geholt und überarbeitet. (Mit Onlinehighscore und allem).
Benötigte Komponenten zum Kompilieren:
Indy(10)
DelphiX(?)
Graphics32 [obwohl ich die Komponente entfernt hatte]

Achja: Der Upload über FTP ist nicht sicher, klar, aber was einfacheres gabs nicht und bei einem kostenlosen Server ist der Schaden gering.

Ich hoffe das Projekt ist nicht zu durcheinander und alle Units sind drin! :drunken:

E307 17. Okt 2006 13:31

Re: DFM(?)- Fehler
 
Ich hab das Projekt nochmal upgedatet. Funktioniert es mit euren Delphis?

[edit]:arrow: Habe jetzt Delphi neuinstalliert, es gibt nur Fehler beim Beenden des Projektes und wenn ich irgendwas mit der Indy-Komponente mache. Ich installiere Indy(10) mal neu[/edit]

E307 17. Okt 2006 18:15

Re: DFM(?)- Fehler
 
Ich habe unter anderem mit diesem Projekt SSL- Experimente (Mit OpenSSL) gemach. Als ich jetzt einen SSL I/O-Handler (Wasimmerdasist) eingefügt habe waren alle Fehlermeldungen weg!!! (Bis auf die ganz am Ende, wegen der TBitmap- Variable). Kann man den SSL-Handler ohne Fehler entfernen?

E307 18. Okt 2006 16:21

Re: DFM(?)- Fehler
 
Hat keiner eine Idee? Funktioniert das Spiel bei euch? :wiejetzt:

Namenloser 18. Okt 2006 16:25

Re: DFM(?)- Fehler
 
Ich kann es nicht öffnen, weil ich diverse komponenten, die benutzt wurden nicht hab. Tut mir leid :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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