背景
在Ubuntu 18.04上,gcc版本为7.x,程序能够正常运行,切到CentOS 8.3后,gcc版本为8.4,遇到pc指针空了的问题,搜索问题产生的原因,说是有两个可能性:函数调用时,缓冲区溢出,将栈里面的值改成了0,导致return的时候jump到了0;手动写了一个指向0的函数指针,然后调用。
debug
由于程序比较大,直接挂gdb很头大,所以用valgrind跑了下,很智能,直接告诉了我是pc指针为0的时候的调用堆栈,但是我一看,代码没有写return,编译的时候报了-Wreturn-type
,但是我没有打开-Wall
。
难道是return没写导致?顺手补上后,重新运行,好使了,一切正常。查了下gcc的文档,里面有句话:
For C++, a function without return type always produces a diagnostic message, even when ‘-Wno-return-type’ is specified.
好吧,看来这个warning后面得当成error来修.
网友评论