web-dev-qa-db-fra.com

Qu'est-ce qu'une faute de segmentation?

Dans Ubuntu, j'ai souvent été confronté à l'erreur de segmentation. Qu'est-ce qu'un défaut de segmentation et quand se produit-il?

26
Tachyons

Une erreur indiquant une erreur de segmentation (ou segfault , ou SIGSEGV) dans Ubuntu et d'autres systèmes d'exploitation de type Unix, ou en disant défaut de protection générale sous Windows, s’entend d’un programme qui tente d’accéder à une partie de la mémoire inaccessible ou à laquelle il est interdit d’accéder. Une erreur de segmentation est une sorte d’arrêt de programme, c’est-à-dire une terminaison anormale d’un programme. Voir les articles de Wikipedia sur crash , protection de la mémoire , erreur de segmentation , erreur 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 ordinateur et sur le programme qui se bloque. Veuillez également fournir le texte complet et exact du message d'erreur que vous recevez et tous les autres messages qui le précèdent. Cela devrait nous permettre de fournir des conseils détaillés spécifiques à votre problème (plutôt que des informations générales sur ce qu'est une faute de segmentation).

Le meilleur moyen pour vous de fournir ces informations consiste à modifier votre question pour l'inclure . Alternativement, si vous souhaitez que cette question concerne uniquement les erreurs de segmentation en général, vous pouvez poster une nouvelle question sur la cause spécifique de vos erreurs de segmentation (si vous procédez ainsi, veillez à fournir tous ces détails dans votre nouvelle question). .

24
Eliah Kagan

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 dans une partie de la mémoire qui ne lui appartient pas (ou n’existe pas). Il est bien entendu interdit de lire ou d'écrire dans la mémoire de quelqu'un d'autre et lorsque le système (le noyau) le détecte, l'application se ferme automatiquement.

4
Vojtech Trefny

L'époque où les gens utilisaient pour tracer le code d'assemblage et résoudre un problème était révolue. Abends, Dr Watson, faute de segmentation. Ces jours verts sont partis.

L'une des raisons d'une erreur de segmentation est due à l'échec du code ayant un accès direct à la mémoire. Lorsqu'un morceau de code tente d'accéder au segment de mémoire d'une application différente, 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 tente 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 exécutées sur le processeur et leur état (dernière instruction exécutée) dans un fichier et tout simplement s’éteindre. Il essaiera également de stocker autant d'informations de récupération et de fermer autant de fichiers que possible, de sorte que le disque dur ne reçoive pas de liens brisés.

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 un diable pour que vous ne le voyiez pas "régulièrement".

0
Siddharth