C ++ std :: list分段错误[重复]

Posted

技术标签:

【中文标题】C ++ std :: list分段错误[重复]【英文标题】:C++ std::list segmentation fault [duplicate] 【发布时间】:2016-12-11 15:29:37 【问题描述】:

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

运行版本:

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;
    

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于C ++ std :: list分段错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C函数调用分段错误[重复]

为啥重新声明 std::cout 会导致分段错误?

std::function 和 lambda 参数的分段错误

返回指针时出现分段错误[重复]

C++ std 线程和列表分段错误(核心转储)

C快速排序(链表)分段错误