Comment puis-je fermer immédiatement un programme en C?

J’écris du code C dans lequel j’parsing des données. J’ai configuré le programme pour gérer seulement 100 entrées de données. Quand il a plus de 100 entrées, cela donne un défaut de segmentation. Je veux créer un moyen pour que lorsque le nombre d’entrées soit supérieur à 100, l’utilisateur soit averti et le programme se termine. Je sais comment le faire depuis la fonction principale en renvoyant simplement return 0 , mais je suis plusieurs appels de fonction éloignés de la principale et il est difficile de le faire, même un return 0 dans cette fonction le gardera en boucle.

Existe-t-il un moyen immédiat de terminer le programme dans son intégralité sans être en position principale?

La exit fonction standard correspond à ce que vous recherchez:

Termine le processus normalement et effectue le nettoyage régulier des processus en cours.

Premièrement, toutes les fonctions enregistrées par les appels à atexit sont exécutées dans l’ordre inverse de leur enregistrement. Ensuite, tous les stream sont fermés et les fichiers temporaires supprimés, puis le contrôle est renvoyé à l’environnement hôte.

L’argument status est renvoyé à l’environnement hôte.

Ce serait mieux cependant si vous corrigiez l’erreur de segmentation.

Vous devez inclure la bibliothèque standard pour pouvoir appeler exit où vous le souhaitez:

 #include  ... exit(status); 

où status est un entier représentant le code de sortie. Pour quel statut de préoccupation: pour la convention 0 est succès, les autres valeurs indiquent un statut d’erreur.

Vous pouvez également fprintf(stderr, ....) , puis appeler abort() ; Cela peut être utile si vous voulez déboguer votre bogue plus tard.

Mais je pense que vous devriez recoder votre programme de manière à ce que les limitations de taille ne soient données que par les ressources disponibles: si vous exécutez votre programme sur un ordinateur beaucoup plus grand (quelle que soit sa signification), il pourrait traiter plus de 100 entrées.

Une meilleure solution consiste peut-être à résoudre le problème de segmentation avec un gestionnaire de signaux et à demander au gestionnaire de signaux de générer un signal SIGSTOP.

De cette façon, votre programme s’arrête, mais rest en mémoire. Vous pouvez ensuite vous y attacher avec un débogueur et voir le programme figé dans sa gloire au point où SEGFAULT est arrivé.

Cela peut être utile pour rechercher des problèmes dans les programmes de longue durée que vous n’exécutez pas dans un IDE de développement.