Une erreur de segmentation est une mise en œuvre défini le comportement de la norme ne définit pas la façon dont la mise en œuvre doit faire face à un comportement indéfini et, en fait, la mise en œuvre pourrait optimiser sortir un comportement indéfini et toujours être conformes à la norme. Pour être clair, la mise en œuvre définies comportement est un comportement qui n'est pas spécifié par la norme, mais la mise en œuvre du document. Un comportement indéfini est du code non portable ou erronées et dont le comportement est imprévisible et ne peut donc pas être invoqué.
Si l'on regarde le C99 projet de norme section 3.4.3
comportement indéfini qui vient sous les Termes, définitions et symboles de la section au paragraphe 1 il est dit(l'accent de la mine et à l'avenir):
problème, lors de l'utilisation d'un non-compatibles ou erronées programme de construction ou de données erronées,
pour lequel la présente Norme Internationale n'impose pas d'exigences
et dans le paragraphe 2 , dit:
NOTE Possible un comportement indéfini plages d'ignorer la situation complètement avec des résultats imprévisibles, à se comporter lors de la traduction ou de l'exécution du programme dans documenté de façon caractéristique de l'environnement (avec ou sans émission d'un message de diagnostic), à la terminaison d'une traduction ou d'exécution (avec l'émission d'un message de diagnostic).
Modifier
En revanche, si vous souhaitez simplement une méthode définie dans la norme qui va provoquer une erreur de segmentation sur la plupart des Unix-like , puis raise( SIGSEGV )
devrait lui permettre d'atteindre cet objectif. Bien que strictement parlant SIGSEGV
est définie comme suit:
SIGSEGV un accès non valide pour le stockage
et la section 7.14
de traitement de Signal , dit:
Une mise en œuvre n'a pas besoin de générer de l'un de ces signaux, sauf à la suite d'explicite
les appels à la relance de la fonction. D'autres signaux et des pointeurs vers undeclarable fonctions,
avec des macro-définitions début, respectivement, avec les lettres d'un SIG et une majuscule
lettre ou avec SIG_ et une lettre majuscule,219) peut également être spécifié par le
la mise en œuvre. L'ensemble des signaux, leur sémantique et leur gestion par défaut
la mise en œuvre est définie; tous les signaux, les nombres doivent être positives.