URL: https://www.overclockers.at/coding-stuff/windows-error_nach_programmende_20207/page_1 - zur Vollversion wechseln!
Ich habe ein programm geschrieben, das ohne Probleme alles macht was es soll.
Nach beenden das Programmes kommt so eine Windows-Fehler Meldung. (Die Fehlerbox hab ich eh als Attachment beigefügt)
Wenn ich am Schluss des programmes den Befehl:
exit (1);
hinschreibe, dann taucht diese Fehlermeldung nicht auf, was ist der Grund für diese Meldung?
Scheint ja ein C++ Programm zu sein, kenn mich mit C++ leider nicht aus.
Aber soviel ich weiss, kann man mit dem exit(i) angeben, ob der Ausstieg "normal" oder "abnormal" definiert ist, kann sein dass 0 für abnormal steht und default is, nur wenn explizit 1 angegeben wird empfindet ers nicht als "abnormal termination" oder so was.
Wie gesagt, ist nur so ne dunkle Erinnerung, könnte also auch absoluter Schwachsinn sein...
Vielleicht meldet sich ja hier nich jmd. zu Wort der sich besser auskennt (davon geh ich mal aus)
Dann schreib einfach exit(1) wenns keinen Fehler gibt, Windoof scheint das zu brauchen....
Geh bitte, so ein Blödsinn! Die Assertion kommt, weil irgendein Destructor einen Crash verursacht (hast wohl irgendwas mit den Pointern verbockt)
Lass es halt mal im Debugger laufen, und schau wo das passiert!
Irgendwo hast du Speicher überschrieben, der nicht dir gehört. Die Debug-Runtime checkt das beim Beenden.
Des hat nix mit Speicherbereich überschreiben zu tun...
Du hast am Ende gar keine Exit Anweisung oder?
Und es in ein Win-Programm oder?
Windows will da unbedingt ne rückmeldung - sonst glaubts des sich des Programm gschossen hat oder irgend nen Plötzsinn gmacht hat...
Wennst sauber programmieren willst solltest sowieso immer mit exit oder return arbeiten!
Bye, Vir@s
Zitat von Vir@sDes hat nix mit Speicherbereich überschreiben zu tun...
Zitat von thatDoch. Die Assertion kommt aus der Debug-Version von "operator delete".
Auszug:
/* get a pointer to memory block header */
pHead = pHdr(pUserData);
/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
Zitat von Vir@s[edit]
außerdem wird durch exit(1); ned ein falsch geschriebener speicherbereich wieder in ordnung gebracht
[/edit]
Zitat von thatKorrekt. Mit exit(1) wird das Programm an dieser Stelle einfach beendet, so dass später im Ablauf auftretende "delete" Aufrufe natürlich nicht mehr ausgeführt werden. D.h. das exit behebt das Symptom (Assertion beim delete), aber nicht die Ursache (überschriebene Kontrollstruktur der Speicherverwaltung).
Des Visual C++ ist ein Scheissdreck, der checkt gar nix der Compiler.
Aber unsere Programmierlehrerin meint wir müssen Mircoshrott verwenden.
Mitn Borland Compiler ists chilliger.
Hab mitlerweile den Fehler gefunden, aber ich hab keine Ahnung wo er war.
Langsam wirds unübersichtlich.
Zitat von HeavySkaterDes Visual C++ ist ein Scheissdreck, der checkt gar nix der Compiler.
Aber unsere Programmierlehrerin meint wir müssen Mircoshrott verwenden.
Mitn Borland Compiler ists chilliger.
Hab mitlerweile den Fehler gefunden, aber ich hab keine Ahnung wo er war.
Langsam wirds unübersichtlich.
Zitat von Vir@sNaja -- aber laut ANSI C++ sollten auch bei einem exit alle delete funktionen noch aufgerufen werden - is nur die Frage wie sehr sich des Visual C++ and ANSI hält
Da sind meine 2 schlauen cents aus der Programmierecke....
<spam>
Real programmers don't comment their code!
It's hard to write, and it should also be hard to read!!!
</endspam>
Alex
Zitat von thatDas gilt aber nur für static Objekte und nicht für die auf dem Stack.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025