46 votes

Qu'est-ce qui peut provoquer des erreurs de segmentation en C++ ?

J'ai remarqué qu'il n'y a pas de question avec une liste de causes courantes de défauts de segmentation en C++, alors j'ai pensé l'ajouter.

Naturellement, c'est le Wiki de la communauté, puisqu'il n'y a pas une seule bonne réponse.

Je pense que cela pourrait être utile pour les nouveaux programmeurs apprenant le C++, n'hésitez pas à le fermer si vous n'êtes pas d'accord.

5voto

fluffels Points 1748

Déréférencement des pointeurs NULL.

 #include <cstddef> //For NULL.
int* p1 = NULL; //p1 points to no memory address
*p1 = 3; //Segfault.

4voto

Schnommus Points 1803

Accéder à un tableau hors limites (possible) :

 int ia[10];
ia[10] = 4; // Someone forgot that arrays are 0-indexed! Possible Segfault.

3voto

Anton Golov Points 1953

Un de mes préférés :

 #include <iostream>
struct A {
    virtual void f() {
        std::cout << "A::f();\n";
    }
    int i;
};

struct B : A {
    virtual void f() {
        std::cout << "B::f();\n";
    }
    int j;
};

void seti(A* arr, size_t size) {
    for (size_t i = 0; i < size; ++i)
        arr[i].i = 0;
}

int main() {
    B b[10];
    seti(b, 10);
    b[3].f();
}

Comme pour la plupart des choses qui peuvent provoquer une erreur de segmentation, cela peut également échouer. Sur ideone, par exemple, b[3].f() échoue, mais b[2].f() fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X