C STD ::列表分割故障

C++ std::list segmentation fault

本文关键字:故障 分割 列表 STD      更新时间:2023-10-16

我在运行程序中有一个分割故障(核心倾倒)。第一个版本运行完美,但我需要列表作为指针,但是该代码不再起作用,请参阅第二个代码。我在做什么错?

运行版本:

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

在第二版testList中只是一个指针,它并不指向任何有效的列表对象。尝试

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

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

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

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