stack smashing detected(c++报错)

博客作者遇到一个棘手的问题,C++程序在新环境中出现stacksmashingdetected错误。经过排查,发现并非代码越界或内存溢出,而是由于编译时和运行时使用的glog库版本不一致导致。通过确保所有依赖项的一致性,问题最终得到解决。作者提醒注意环境配置和库版本管理,避免类似错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stack smashing detected(c++报错)

stack smashing detected这种错误在网上一查一大把,无非很多讲的都是内存溢出、生命周期结束等等,其实道理都是访问了越界的地址。简单的越界看看代码很容易就找到了,复杂的代码可以看看汇编,或者使用代码屏蔽大法就可以解决。
这次我遇到的也是个小问题,代码在之前的机器上运行没问题,但是换了一台机器就报错:stack smashing detected。
报错
代码也很简单,就一个读取配置文件的初始化:
代码
这段代码屏蔽完是不会有问题的,开始我已知以为我不小心修改了配置文件的类。
结果当把配置文件屏蔽掉后还是报错。

只保留了日志
只有日志打印了居然还会报错。
LOGINFO其实就是用的LOG(INFO)【来自glog】

好吧glog肯定不会出错的,这时可以确定是编译引用的问题了,可能存在两个不要的版本的glog,
编译的时候用了一种,实际使用时用了另一种,导致编译没问题,运行就报错。

果然,保持只有一种使用一种glog的时候就OK了。

这个问题有时候很容易出现在环境上,也有可能自己定义的类名和第三方或其它人开发的类名相同,导致编译的时候无法区分,以至于最终运行时内存数据是杂乱的。

这次真是自己坑了自己,一个小错找了一个小时。自己差点emo了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值