Le code suivant déclenche une erreur de segmentation à la sortie. Il semble se produire que si les données sont alloués sur la pile entre le « sigaction » appel et la boucle:C++/gcc: erreur de segmentation à la sortie de la main après avoir intercepté un signal
#include <signal.h>
#include <unistd.h>
bool end = false;
void handler(int) {
end = true;
}
int main() {
struct sigaction sigs;
sigs.sa_handler = handler;
sigaction(SIGINT, &sigs, NULL);
int i;
while (!end)
sleep(1);
return 0;
}
Exécuter et arrêter avec ctrl-C
-> ligne « int i » sur : erreur de segmentation
-> sans ligne 'int i': sortie ok
(compilé avec g ++ v4.1.1, OS noyau linux 2.6.19)
sons comme un problème de libération de pile ... quelqu'un a une explication?
Merci,
Pourquoi avez-vous un zéro dans le {} s? –
Vieille habitude. Supprimé maintenant – nos
cela fonctionne, merci nos – Francois