stack smashing detected(c++报错)
stack smashing detected这种错误在网上一查一大把,无非很多讲的都是内存溢出、生命周期结束等等,其实道理都是访问了越界的地址。简单的越界看看代码很容易就找到了,复杂的代码可以看看汇编,或者使用代码屏蔽大法就可以解决。
这次我遇到的也是个小问题,代码在之前的机器上运行没问题,但是换了一台机器就报错:stack smashing detected。
代码也很简单,就一个读取配置文件的初始化:
这段代码屏蔽完是不会有问题的,开始我已知以为我不小心修改了配置文件的类。
结果当把配置文件屏蔽掉后还是报错。
只有日志打印了居然还会报错。
LOGINFO其实就是用的LOG(INFO)【来自glog】
好吧glog肯定不会出错的,这时可以确定是编译引用的问题了,可能存在两个不要的版本的glog,
编译的时候用了一种,实际使用时用了另一种,导致编译没问题,运行就报错。
果然,保持只有一种使用一种glog的时候就OK了。
这个问题有时候很容易出现在环境上,也有可能自己定义的类名和第三方或其它人开发的类名相同,导致编译的时候无法区分,以至于最终运行时内存数据是杂乱的。
这次真是自己坑了自己,一个小错找了一个小时。自己差点emo了。