Dans Ubuntu, j'ai rencontré l'erreur de segmentation à plusieurs reprises. Qu'est-ce qu'un défaut de segmentation et quand survient-il?
memory
segmentation-fault
Tachyons
la source
la source
Réponses:
Une erreur indiquant une erreur de segmentation (ou segfault , ou SIGSEGV ) dans Ubuntu et autres Unix comme les systèmes d' exploitation, ou en disant erreur de protection générale dans Windows, est lorsqu'un programme tente d'accéder à une partie de la mémoire qui ne sont pas accessibles, ou que le programme est interdit d'accès. Un défaut de segmentation est une sorte de plantage du programme, c'est-à-dire une interruption anormale d'un programme. Voir les articles de Wikipedia sur les plantages , la protection de la mémoire , la panne de segmentation , la panne de protection générale et SIGSEGV pour plus d'informations (et une compréhension plus texturée du sujet que celle présentée ici).
Une erreur de segmentation est presque toujours due à un bogue dans le programme où elle se produit. Je suppose que la plupart ou la totalité de vos erreurs de segmentation se produisent à partir de la même application. Veuillez fournir plus de détails sur les circonstances dans lesquelles des erreurs de segmentation se produisent sur votre machine et sur le programme qui plante. Veuillez également fournir le texte complet et exact du message d'erreur que vous recevez et de tout autre message qui apparaît devant lui. Cela devrait nous permettre de fournir des conseils détaillés spécifiques à votre problème (plutôt que de simples informations générales sur ce qu'est un défaut de segmentation).
La meilleure façon pour vous de fournir ces informations est de modifier votre question pour l'inclure . Alternativement, si vous voulez que cette question concerne uniquement les défauts de segmentation en général, vous pouvez poster une nouvelle question pour demander ce qui cause spécifiquement vos défauts de segmentation (si vous le faites, assurez-vous de fournir tous ces détails dans votre nouvelle question) .
la source
L'erreur de segmentation est causée par un bogue dans l'application. Techniquement, cela signifie que l'application essaie de lire ou d'écrire sur une partie de la mémoire qui ne lui appartient pas (ou n'existe pas). Il est bien sûr interdit de lire ou d'écrire dans la mémoire de quelqu'un d'autre et lorsque le système (noyau) le détecte, cela forcera l'application à se fermer.
la source
Il est révolu le temps où les gens avaient l'habitude de tracer le code de l'assembly et de déboguer un problème. Abends, Dr Watson, faute de segmentation. Ces jours verts sont partis.
L'une des raisons d'une erreur de segmentation est lorsque le code qui a un accès direct à la mémoire échoue. Lorsqu'un morceau de code tente d'accéder au segment de mémoire d'une autre application, une erreur de segmentation se produit. Les allocations de mémoire sont parfois déplacées pour permettre l'allocation de blocs de mémoire contigus plus grands. Pendant qu'il essaie de récupérer, le noyau s'efforce de sauvegarder toutes ses informations de mémoire dans un fichier, l'état actuel de toutes les applications en cours d'exécution sur le processeur et leur état (dernière instruction exécutée) dans un fichier et il vient de mourir. Il essaiera également de stocker autant d'informations de récupération et de fermer autant de fichiers que possible, afin que les disques durs n'obtiennent pas de liens rompus.
Déboguez-le et corrigez-le si vous pouvez le reproduire souvent. Si vous ne pouvez pas le reproduire, joignez simplement vos mains, agenouillez-vous et priez comme l'enfer pour que vous ne le voyiez pas "régulièrement".
la source
SIGSEGV
gestionnaire sur autre chose queSIG_DFL
(qui est de vider le noyau et de quitter pour aSIGSEGV
) car si vous accédez à la mémoire que vous ne devriez pas l'être, alors quelque chose est allé très mal et la récupération est probablement impossible. (2) Un core ne sera sauvegardé qu'une fois le processus arrêté. (3) Le vidage de mémoire ne comprend que la mémoire et les registres du processus qui a été vidé. (4) Les autres processus, le CPU et le kernal ne sont pas affectés par une erreur de segmentation d'un autre processus.