c++ - 程序在返回 0 后收到 SIGSEGV 错误

标签 c++

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7b8bc26 in std::basic_filebuf<char, std::char_traits<char> >::_M_terminate_output() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(gdb) where
#0  0x00007ffff7b8bc26 in std::basic_filebuf<char, std::char_traits<char>    >::_M_terminate_output() ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#1  0x00007ffff7b8c6a2 in std::basic_filebuf<char, std::char_traits<char>>::close()       ()  from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#2  0x00007ffff7b8cb2a in std::basic_ofstream<char, std::char_traits<char> >::~basic_ofstream() ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x0000000000403e02 in main (argc=2, argv=0x7fffffffe1c8)
at main.cpp:630

我在程序执行后和“return 0;”后遇到这个错误已被执行。

我使用了来自 STL 的 vector 。仅当输入文件非常大时才会抛出此错误(我在图中有大约 10000 个节点)

此外,我无法将输出写入文件。目前我已经评论了那部分。

请帮我解决问题。 我正在使用 Ubuntu 12.10 64 位。

最佳答案

main 返回后的错误可能由(至少)引起:

  • 狡猾的 atexit 处理程序;或
  • 某些描述的内存损坏。

在这两者中,它更有可能是后者,因此您应该在动态内存使用分析工具下运行您的代码,例如 valgrind。您对导致问题的大 vector 的描述似乎也支持这一论点。

关于c++ - 程序在返回 0 后收到 SIGSEGV 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13131832/

相关文章:

c++ - const 类对象与 const 数据成员有何不同?

c++ - 即使从未实例化引用变量主模板,是否也需要对其进行初始化?

c++ - 如何在 Qt Creator 中将默认的预选应用程序类型从纯 C 应用程序永久更改为纯 C++ 应用程序?

c++ - Qt 在背景项上传播绘制事件

c++ - 带有指向对象初始化的指针的数组

c++ - 链接后剥离共享库是否安全?

c++ - 无法理解 int 和用户定义类型之间的名称查找差异 - 可能与 ADL 相关

c++ - 跳转到案例标签跨越 'std::unique_lock<std::mutex>' 的初始化

c++ - 将节点添加到 LinkedList 不是永久 C++

c++ - std::list,仅使用迭代器移动列表中的项目