2016-12-11 12 views
-4

私のプログラムを実行中にセグメンテーションフォルト(コアダンプ)が発生しました。最初のバージョンは完全に動作しますが、私はポインタとしてリストを必要としますが、コードはもう動作しません。何が間違っているのですか?C++ std :: listセグメンテーションフォールト

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; 
} 

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; 
}  

答えて

0

list<int>オブジェクトがないため、2番目のオブジェクトは実行できませんが、任意のメモリ空間を指すポインターだけです。

ポインタを使用する場合は、まずメモリ領域を割り当てます。

0

TestListは、有効なリストオブジェクトを指し示さない単なるポインタです。お試しください。

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

完了したらヒープ割り当てメモリをリストの適切にクリーンアップする必要があることに注意してください。

関連する問題