我的程序在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