我的程序在main()函数之前崩溃。我确定这一点使用 “CERR”:main()之前崩溃()
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)
我检查了代码, “删除” 和 “自由” 的功能。
if (x) delete x;
请帮我回答两个问题:1。 什么可以为可能出现的问题全部删除与检查这样做呢? 2.如何找到它? (我有一个很大的代码,有很多文件和cmake进行编译)。
P.S.我读Is there any way a C/C++ program can crash before main()?,但看着gdb按摩,我想图书馆是好的。
你不需要'if(x)'检查。它不添加任何东西。您正在删除未用'new'分配的内容。 – juanchopanza
juanchopanza,好主意,谢谢。但为什么如果(x)什么都不做?指针初始化为0. – klm123
,因为在空指针上调用'delete'是空操作。 – juanchopanza