2016-12-11 82 views
-4

运行我的程序时出现了段错误(核心转储)。第一个版本运行完美,但我需要列表作为指针,但代码不再工作了,看第二个代码。我究竟做错了什么?C++ std :: list分段错误

乳宁版本:

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>(); 

请记住,您还需要在完成后正确清理堆分配的内存。