2016-12-11 3 views
-4

J'ai reçu une erreur de segmentation (core dumped) lors de l'exécution de mon programme. La première version fonctionne parfaitement, mais j'ai besoin de la liste comme pointeur, mais le code ne fonctionne plus voir le second code. Qu'est-ce que je fais mal?Défaut de segmentation std :: list C++

Version Marchepied:

int main(int argc, char *argv[]) { 

    std::list<int> TestList; 
    for (int i = 0; i < 10; ++i) { 
    TestList.push_back(i); 
    } 

    for (std::list<int>::const_iterator iterator = TestList.begin(), end = TestList.end(); iterator != end; ++iterator) { 
    std::cout << *iterator << std::endl; 
    } 

    return 0; 
} 

version non runing:

int main(int argc, char *argv[]) { 

     std::list<int> *TestList; 
     for (int i = 0; i < 10; ++i) { 
     TestList->push_back(i); 
     } 

     for (std::list<int>::const_iterator iterator = TestList->begin(), end = TestList->end(); iterator != end; ++iterator) { 
     std::cout << *iterator << std::endl; 
     } 

    return 0; 
}  

Répondre

0

Le second ne peut pas s'exécuter puisqu'il n'y a pas d'objet list<int>, mais juste un pointeur pointant vers un espace mémoire arbitraire.

Si vous souhaitez utiliser le pointeur, allouez d'abord la zone mémoire.

0

Dans la deuxième version, TestList est juste un pointeur qui ne pointe vers aucun objet liste valide. Essayez

std::list<int>* TestList = new std::list<int>(); 

N'oubliez pas que vous devez nettoyer correctement la mémoire allouée par tas pour la liste lorsque vous avez terminé.