2012-10-30 57 views
1
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 

我在程序执行后和“返回0”后面临此错误。已执行。程序在返回0后收到SIGSEGV错误0

我已经使用了STL的载体。仅当输入文件大小很高时才会出现此错误(我在图中有大约10000个节点)

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

请帮我解决问题。 我使用的是Ubuntu 12.10 64位。从main返回后

+2

您可能有某种堆损坏问题。你可以尝试在'valgrind'下运行程序。 – LSerni

+0

你使用无效的迭代器吗? –

+0

你有没有析构函数的全局对象?这是我想到的第一件事情,就是在最终返回语句后执行的东西。 – dasblinkenlight

回答

1

错误可由(至少)引起的:

  • 躲闪atexit处理程序;或
  • 内存损坏的一些说明。

在这两者中,它更可能是后者,因此您应该在动态内存使用分析工具(如valgrind)下运行您的代码。您对引起问题的大型媒介的描述似乎也支持这种争论。

+0

是的,我使用全局矢量,因为我将在其他文件中使用生成的矢量。我只使用库。我没有写任何系统生成旁边的析构函数调用。我在Windows上尝试了相同的代码,它工作。但我只需要在Linux上运行它。 – user1784378

+0

@ user1784378,建议使用内存分析工具。未定义行为中最令人讨厌的特征之一是它可能在某些情况下工作。如果它总是失败,它会更容易找到,它不会是未定义的:-) – paxdiablo