Centos-64位系统环境运行出错:Address 0xfffffffff0007b30 out of bounds

问题背景

开发一个功能,在centos-32bit环境下运行好好的,切换部署到centos-64bit环境竟然崩溃了段错误,调试之,提示out of bounds。

问题分析

根据现象是内存出错(要么被释放了,要么越界),仔细分析下源码,没问题呀,malloc主动分配,不应该会被系统回收释放,地址范围也没错;

断点一步步调试,发现是在调用某个so库的函数时返回一个指针,在返回的下一步就提示out of bounds,查看对应内存地址,原来的值确实也没了,看来问题应该是在函数调用返回的时候触发的;这个函数是在一个线程环境中执行的,难道跟线程调用有关系;扣取调用so函数的代码放到主线程,还是挂(跟线程环境没关系?);接下来干脆放到main函数去调用,竟然没挂,这时候想起来有人引用了对应的头文件可以解决问题,报着尝试的态度,发现还真没有include,添加后,再运行,正常了。

总结

这个应该是centos64环境下gcc编译c代码规则更严格了,仔细查了下编译信息,确实有implicit declaration of function的警告,所以为了避免一些不必要的奇怪现象,坚决做到0警告,0错误才行。

查看原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值