Windows-Error nach Programmende

Seite 1 von 2 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/windows-error_nach_programmende_20207/page_1 - zur Vollversion wechseln!


HeavySkater schrieb am 13.12.2001 um 13:57

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?


ThoBay schrieb am 13.12.2001 um 14:14

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)


jb schrieb am 13.12.2001 um 14:16

Dann schreib einfach exit(1) wenns keinen Fehler gibt, Windoof scheint das zu brauchen....


Ringding schrieb am 13.12.2001 um 16:41

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!


that schrieb am 13.12.2001 um 19:11

Irgendwo hast du Speicher überschrieben, der nicht dir gehört. Die Debug-Runtime checkt das beim Beenden.


Vir@s schrieb am 13.12.2001 um 19:14

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


that schrieb am 13.12.2001 um 19:49

Zitat von Vir@s
Des hat nix mit Speicherbereich überschreiben zu tun...

Doch. 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));


Vir@s schrieb am 13.12.2001 um 19:53

Zitat von that
Doch. 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));

des muss aber ned von einem von erm verwendeten pointer sein...

kann sein des des ****** Visual C++ speicher reserviert und ohne return oder exit meldung den speicher behält - sich des programm aber beendet und somit glaub windows des sich des programm selber raushaut :)

[edit]

außerdem wird durch exit(1); ned ein falsch geschriebener speicherbereich wieder in ordnung gebracht :)

[/edit]


that schrieb am 13.12.2001 um 20:13

Zitat von Vir@s
[edit]

außerdem wird durch exit(1); ned ein falsch geschriebener speicherbereich wieder in ordnung gebracht :)

[/edit]

Korrekt. 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).


Vir@s schrieb am 13.12.2001 um 21:12

Zitat von that
Korrekt. 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).

Naja -- 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 :)


HeavySkater schrieb am 13.12.2001 um 21:26

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.


Vir@s schrieb am 13.12.2001 um 21:30

Zitat von HeavySkater
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.

Den einzigen rat den ich dir geben kann:

Nach ANSI Standard programmieren, schön einrücken und KOMMENTARE SCHREIBEN :)

Bye Vir@s


that schrieb am 13.12.2001 um 21:33

Zitat von Vir@s
Naja -- 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 :)

Das gilt aber nur für static Objekte und nicht für die auf dem Stack.


Doomed ACE schrieb am 13.12.2001 um 21:35

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


Vir@s schrieb am 13.12.2001 um 21:35

Zitat von that
Das gilt aber nur für static Objekte und nicht für die auf dem Stack.

stimmt - stack wird ja "praktischer" weise nicht entleert :)

Naja - was solls - M$ suxs - Linux rules :P




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025