在main()之前崩溃
Crash before main()
我的程序在main()函数之前崩溃。我使用"cerr"确定这一点:
int main(int argc, char **argv)
{
cerr << " MAAIN " << endl;
来自gdb:的消息
Reading symbols for shared libraries ...........+++............................ done
CA(34652) malloc: *** error for object 0x7fff76694860: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Program received signal SIGABRT, Aborted.
0x00007fff88e1782a in __kill ()
(gdb) bt
#0 0x00007fff88e1782a in __kill ()
#1 0x00007fff8c4d2a9c in abort ()
#2 0x00007fff8c53184c in free ()
#3 0x00000001026a1db0 in std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::overflow ()
(gdb)
我已经检查了"删除"answers"免费"功能的代码。所有删除都是这样检查完成的:
if (x) delete x;
请帮我回答两个问题:1.可能的问题是什么?2.如何找到它?(我有一个很大的代码,里面有很多文件和cmake用于编译)。
附言:我读过有没有办法让C/C++程序在main()之前崩溃?但是看看gdb-message,我想库是可以的。
cout
不是检查程序崩溃位置的好方法,因为cout
不会立即刷新其缓冲区,并且程序可能在cout
之后但在刷新缓冲区之前崩溃。最好用cerr
而不是cout
检查
在主函数之前,全局变量的构造函数将调用。所以,如果你认为它在开始前崩溃了,就看看它们。
另一种可能性是为调用主函数之前发生的主函数中的数组分配内存。如果它们是巨大的。必须使用new
为它们分配内存。
std::basic_stringbuf<char, std::char_traits<char>...
告诉我是std::string
出错了。一种很可能的情况是,您有一些东西试图"释放"一个字符串,但该字符串没有正确构造,或者被数组的非拒绝使用所覆盖。
或者你依赖于不同源文件中的一些全局变量,所以你有这样的东西:
// main.cpp:
...
extern string str; // str lives in another .cpp file
....
myclass x(str); // Construction using str.
// otherfile.cpp
string str("foobar");
在这种情况下,在构造x
时,可能无法构造str
,并且字符串为"无效"。
类似的可能性还有很多。
这里的地址:0x7fff76694860
在堆栈上。如果它总是相同的值,你可以试着追踪它在哪里。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 代码在main()中运行,但在函数中出现错误
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- int main = 0,已编译但崩溃
- STD :: FSTREAM在使用预先分配的内存时在Main之后崩溃
- 当使用 /ENTRY:main 和 /MT 运行时库编译为 /SUBSYSTEM:WINDOWS 时,应用程序崩溃
- 如何在main()之前调试程序崩溃
- DBUS 代码在放置在守护进程内时崩溃,但在没有守护进程代码的独立独立 main() 函数中运行良好
- C++ Builder XE3 在 main() 之前运行和崩溃
- 我有一个 c++ 代码,它在启动时崩溃,然后到达问题所在 main() 的执行
- 代码运行良好,但从 main() 返回时崩溃
- C++程序在main之前崩溃
- 尝试使用 CreateProcess() ;没有编译器错误,但 main 不断崩溃
- 在main()之前崩溃
- 当从Xcode运行时,C++程序在main之前崩溃(但从命令行可以)