web-dev-qa-db-fra.com

Qu'est-ce qu'un défaut de segmentation sous Linux?

Sous Linux:

Qu'est-ce qu'un défaut de segmentation? Je sais que cela bloque les programmes, mais est-ce une sorte de problème de fuite de mémoire ou quelque chose de complètement indépendant? Aussi, comment gérez-vous cela? S'agit-il généralement d'un problème de configuration de l'ordinateur ou de l'application elle-même?

Cela se produit-il également dans d'autres systèmes d'exploitation?

31
Russel

Une erreur de segmentation survient lorsque votre programme tente d'accéder à la mémoire à laquelle il n'a pas été attribué par le système d'exploitation ou n'est pas autorisé à y accéder.

"segmentation" est le concept de chaque processus sur votre ordinateur ayant son propre espace d'adressage virtuel distinct. Ainsi, lorsque le processus A lit l'emplacement mémoire 0x877, il lit les informations résidant à un emplacement physique différent dans RAM) que lorsque le processus B lit son propre 0x877.

Tous les systèmes d'exploitation modernes prennent en charge et utilisent la segmentation, et tous peuvent donc produire un défaut de segmentation.

Pour faire face à une erreur de segmentation, corrigez le code à l'origine de celle-ci. Cela indique généralement une mauvaise programmation, en particulier des erreurs de conditions aux limites, une manipulation incorrecte du pointeur ou des hypothèses invalides sur les bibliothèques partagées. Parfois, les erreurs de segmentation, comme tout problème, peuvent être causées par un matériel défectueux, mais ce n'est généralement pas le cas.

27
Borealid

Un "segfault" est lorsqu'un programme accède à une mémoire protégée ou invalide; généralement en raison d'une mauvaise gestion de la mémoire ou d'une manipulation du pointeur de bogue.

Le système d'exploitation détecte l'accès à la mémoire non valide et bloque l'application.

6
John Weldon