exit(0) oder nicht exit(0)

From: Daniel Graupner <Listen(at)danielgraupner.de>
Date: Tue, 15 Aug 2006 17:13:28 +0200

Hallo,

ich bin beim Programmieren (C++) auf ein merkwürdiges Verhalten gestoßen und
kann mir das nicht so recht erklären, vielleicht hat ja jemand eine Idee. Da
es um konkrete syscalls geht ist es denke ich nicht ganz OT 8-).

Also, die main Fumktion meines Programms endet so:

cout << li_Result << endl;
        return li_Result;
}

Wobei li_Result den Rückgabewert des Programms beinhaltet. Ein strace auf das
binary sieht wie erwartet aus:

write(1, "0\n", 20
) = 2
exit(0) = ?

Nun verändere ich eine Zeile in meinem Programm. Damit setze ich lediglich
einen Zeiger anders, dieser Zeiger zeigt bis Programmende auf ein gültiges
Objekt.

Der strace sieht nun folgendermaßen aus:

write(1, "0\n", 20
) = 2
--- SIGSEGV (Segmentation fault: 11) ---
--- SIGSEGV (Segmentation fault: 11) ---

Es scheint also bei exit(0) zu einem SegFault zu kommen. Das ist mir
unverständlich, das kann doch letztlich nichts mit meinem Code zu tun haben,
oder? (atexit nutze ich nicht).

Nun ja, ich habe das "segfaultende" Programm etwas erweitert:

cout << li_Resul << endl; // exit(0);
        exit(li_Result );
}

Nun sagt strace wieder:
write(1, "0\n", 20
) = 2
exit(0) = ?

Es funktioniert also wenn ich exit(0) händisch aufrufe aber nicht mit dem
return(0) in main. Das ganze erschließt sich mir irgendwie nicht so
recht... . Ich bin mir nicht sicher ob das nun ein Programmierfehler
meinerseits ist, main() läuft ja durch.

Hat jemand Ideen?

Viele Grüße,
Daniel.

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 15 Aug 2006 - 17:14:51 CEST

search this site