Re: exit(0) oder nicht exit(0)

From: Bernd Walter <ticso(at)cicely12.cicely.de>
Date: Wed, 16 Aug 2006 13:36:18 +0200

On Wed, Aug 16, 2006 at 10:53:10AM +0200, Daniel Graupner wrote:
> Am Mittwoch 16 August 2006 09:29 schrieb Oliver Fromme:
> > Daniel Graupner wrote:
> > > Dominik Brettnacher wrote:
> > Ja, aber auf unterschiedliche Weise, z.B. sieht der Stack
> > in beiden Fällen ganz anders aus. Wenn Du also irgendwo
> > einen Bug hast (Pointer-bug, Buffer-overflow o.ä.), der
> > einen Teil des Stacks überschreibt (z.B. die Rücksprung-
> > adresse von main()), würde es das Phänomen exakt erklären.
>
> Hmm, ich dachte das "return 0" resultiert letztlich auch nur in nem "exit(0)".
> Warum sieht der stack anders aus, die Sachen im Stack müssen doch so oder
> so "geseichert" werden.

Exit(0) beended den Prozess, return 0 beended deine Funktion und das
Programm.
Der Unterschied ist, das in letzterem Fall die Funktion beim Ende noch
Objekte entfernen kann, sowie beim Programmende noch globale Objekte
entfernt werden.
Beim direkten exit() Aufruf werden nur noch atexit(3) registrierte
Funktionen aufgerufen - evtl sorgt C++ dafür, dass globale Destruktoren
aufgerufen werden, aber die lokalen vom main() garantiert nicht.

> > Eine andere Erklärung gibt es IMHO nicht.
>
> OK, beim debuggen könnten tools wie valgrind also helfen, mal sehen.

Oder zumindest einfach mal per gdb nachsehen in welcher Funktion
das Problem auftritt - muss ja nicht zwangsläufig ein Stack-Problem
sein.

-- 
B.Walter                http://www.bwct.de      http://www.fizon.de
bernd(at)bwct.de           info(at)bwct.de            support(at)fizon.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 16 Aug 2006 - 13:38:23 CEST

search this site