C ++ std :: list segmentation fault

时间:2016-12-11 15:29:37

标签: c++ list fault

我在运行程序时遇到了分段错误(核心转储)。第一个版本运行完美,但我需要列表作为指针,但代码不再工作看到第二个代码。我做错了什么?

运行版本:

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

2 个答案:

答案 0 :(得分:0)

第二个无法运行,因为没有list<int>对象,只是一个指向任意内存空间的指针。

如果要使用指针,请先分配内存区域。

答案 1 :(得分:0)

在第二个版本中,TestList只是一个指向任何有效列表对象的指针。试试

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

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