程序莫名崩溃,提示段错误segmentation fault,没崩溃时变量的数值也是乱的,一开始猜想是内存泄漏,最后发现并不是。
用gdb调backtrace(bt)提示
#0 0xb4bf58d8 in ?? () from /lib/libc.so.6
cannot access memory at address 0x0
#1 0xb4bf9134 in ?? () from /lib/libc.so.6
cannot access memory at address 0x0
看不出来哪里出错了。
用注释法定位到出错函数,把该函数改成空函数依旧会崩溃,仔细一看,原来是函数声明有返回值,但实际没有返回。
这个函数在一开始设计是有返回值的,但是现在觉得不需要,所以就没返回,忘记修改声明。
QString func(void) {;}
在编译的时候有告警,但这个程序正在重构中,有很多告警,我直接给忽略了。
需要返回值的函数没有返回居然会引起内存混乱和程序崩溃,长知识了,有空再看看什么原理。