2016-12-11 8 views
-4

У меня возникла ошибка сегментации (ядро сбрасывается) при запуске моей программы. Первая версия работает отлично, но мне нужен список как указатель, но затем код больше не работает, см. Второй код. Что я делаю не так?C++ std :: ошибка сегментации списка

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

Не подножка версия:

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> отсутствует, а указатель указывает на пространственное пространство.

Если вы хотите использовать указатель, сначала выделите область памяти.

0

Во второй версии TestList - это просто указатель, который не указывает на какие-либо действительные объекты списка. Попробуйте

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

Помните, что вам необходимо правильно очистить выделенную кучу память для списка, когда вы закончите.