ProgrammAbsturz beim beenden



  • Mein Programm stürzt beim Beenden immer ab!:( Vielleicht hat ja von euch einer ne Ahnung woher das kommt.😕
    Ich habe das ganze mal gedebuggt:
    Er springt beim Beenden in die Datei: forms.hpp in die Funktion: "inline __fastcall virtual ~TForm(void) { }" die sich in der Klasse "class PASCALIMPLEMENTATION TForm : public TCustomForm" befindet.
    Von dort geht es dann weiter in die new.h. Dort wird dann die Klasse: "class _RWSTDExport bad_alloc : public exception" angesprungen und es kommt eine Fehlermeldung: "Im Projekt xxx ist eine Exception der Klasse EAccessViolation
    aufgetreten. 'Zugriffsverletzung ...."



  • speicher reserviert und nicht wieder freigegeben, dll dynamisch geladen und nicht entladen, irgendeine funktion aufgerufen die ein "gegenstück" braucht (in der art begin() ... end()) und das "gegenstück (end()) vergessen...



  • dll's benutze ich keine.
    und wie soll ich heraus bekommen was ich nicht wieder freigegeben habe?
    die fehlermeldung lässt nicht gerade wenige rückschlüsse zu...



  • CodeGuard
    memproof



  • Ergötze uns doch einfach mal mit der Fehlermeldung... Hast du globale Variablen/Zeiger/Instanzen die du anlegst und zu früh zerstörst?

    -junix



  • @junix
    fehlermeldung steht im 1.Post!

    habe nun mal den codeguard angeschmissen. bekomme folgende infos:

    Fehler 00036. 0x300010 (Thread 0x03D4):
    Ressourcen-Leck: Objekt (0x10BBA28) wurde nie gelöscht
    
    Objekt (0x010BBA28) [Größe: 16 Byte] war erzeugt mit new
    Aufrufhierarchie:
       0x00402453(=Programm.exe:0x01:001453) D:\programm\Main.cpp#48
       0x0046389F(=Programm.exe:0x01:06289F)
       0x0046359B(=Programm.exe:0x01:06259B)
       0x0046A3E8(=Programm.exe:0x01:0693E8)
       0x00401392(=Programm.exe:0x01:000392) D:\programm\Programm.cpp#39
       0x004B1C33(=Programm.exe:0x01:0B0C33)
    
    ------------------------------------------
    Fehler 00037. 0x300010 (Thread 0x03D4):
    Ressourcen-Leck: Objekt (0x1270004) wurde nie gelöscht
    
    Objekt (0x01270004) [Größe: 5052924 Byte] war erzeugt mit new
    Aufrufhierarchie:
       0x0040248F(=Programm.exe:0x01:00148F) D:\programm\Main.cpp#49
       0x0046389F(=Programm.exe:0x01:06289F)
       0x0046359B(=Programm.exe:0x01:06259B)
       0x0046A3E8(=Programm.exe:0x01:0693E8)
       0x00401392(=Programm.exe:0x01:000392) D:\programm\Programm.cpp#39
       0x004B1C33(=Programm.exe:0x01:0B0C33)
    
    ------------------------------------------
    Fehler 00038. 0x300010 (Thread 0x03D4):
    Ressourcen-Leck: Objekt (0x10B63C4) wurde nie gelöscht
    
    Objekt (0x010B63C4) [Größe: 216 Byte] war erzeugt mit new
    Aufrufhierarchie:
       0x004024CA(=Programm.exe:0x01:0014CA) D:\programm\Main.cpp#50
       0x0046389F(=Programm.exe:0x01:06289F)
       0x0046359B(=Programm.exe:0x01:06259B)
       0x0046A3E8(=Programm.exe:0x01:0693E8)
       0x00401392(=Programm.exe:0x01:000392) D:\programm\programm.cpp#39
       0x004B1C33(=Programm.exe:0x01:0B0C33)
    
    ------------------------------------------
    Aufgerufene Funktionen:
     fflush (4 Mal)
     delete (11 Mal)
     free (7 Mal)
     strstr (2 Mal)
     strchr (11 Mal)
     strcat (27 Mal)
     strncat (27 Mal)
     memset (31 Mal)
     vsnprintf (12 Mal)
     SysReallocMem (201 Mal)
     new (14 Mal)
     SysFreeMem (5282 Mal)
     SysGetMem (5289 Mal)
     lstrlenA (1 Mal)
     lstrcpyA (4 Mal)
     calloc (1 Mal)
     strlen (73 Mal)
     realloc (1 Mal)
     strdup (1 Mal)
     malloc (4 Mal)
     memcpy (4 Mal)
    Verwendete Ressourcen-Arten:
     Objekt (14 Allocs, 14 max)
     Speicherblock (5296 Allocs, 1265 max)
    Verwendete Module:
     00400000 01/29/2004 11:49:52 D:\programm\Programm.exe
    ==========================================
    

    kann nur leider immernochnix mit anfangen.



  • Ja, toll, so halbzensierte Meldungen sind unbrauchbar. Was den CodeGuard-Auszug angeht: Schau mal die Zeilen in denen "Resourcen Leck" steht genauer an... und dann solltest du nach dem Abssturz mal den calling-Stack anschauen bei der Zerstörung welches Formulars die AccessVoilation passiert...

    -junix



  • durchsuche deinen quelltext mal nach allen dynamisch erstellten objekten (alles mit new) und prüfe dann jeden programmpfad, ob du auch delete anwendest, um den speicher wieder freizugeben. oder gibst du speicher frei, auf den an anderer stelle noch verwiesen wird, über einen zeiger...

    good luck.

    Gruss, LVMH.



  • sTormtrOOpa,
    wenn Du trotz aller Hinweise noch keine Sonne siehst, versuche es mit dem Ausschluß-Prinzip: kommentiere alles Verdächtige schrittweise aus, bis der Fehler nicht mehr auftritt und taste Dich dann langsam an die Fehler-Quelle heran. Und dann nochmal nachfragen, denn jetzt kann Dir keiner helfen.
    Wie schon erwähnt: alle Code-Fragmente, die etwas mit new und delete zu tun haben, sind die besten Kandidaten ...



  • @junix
    was soll das heissen "so halbzensierte Meldungen" ??? da ist nix zensiert!

    habe jetzt alle mit new erzeugten objekte überprüft. der fehler liegt eindeutig in der freigabe der formulare!

    ich lasse deshalb jetzt alle formulare dynamisch erzeugen. das hilft...habe keine abstürze mehr...
    echt sehr merkwürdig!!!???

    @all
    nochmal danke für die hilfe


Anmelden zum Antworten