pragma pack 引发的 stack smashing[字节对齐导致的栈奔溃]

博客讲述了作者在C++开发中遇到的由于pragma pack使用不当导致的栈溢出问题。通过gdb调试发现并非常规的数组越界或内存拷贝问题,而是字节对齐设置错误。作者参考StackOverflow文章,意识到未正确恢复默认对齐导致的实例布局变化,最终通过添加#pragma pack()修复了问题。
摘要由CSDN通过智能技术生成

认真看 VSIDE 错误提示信息可以解决大部分错误

心路历程

今天一块开发项目的mm突然告诉我程序崩溃了:表面原因是因为添加了一个xml工具模块,去掉调用的部分就不会奔溃了。
我觉得问题没辣么简单:因为C++机制的原因可能某一块的内存操作问题导致而且这个工具模块用在了很多地方没出过问题
然后我开始寻找问题:

gdb 调试信息显示确实在调用哪个函数后奔溃:stack_chk_fail.即是栈溢出 但是一般导致栈溢出的原因:1.数组越界 2.sprintf()、memcpy()、strcpy()等函数 3.写入越界

那个函数并没有上述这些,只是声明了俩个第三方类的常量;[我做出了第一次尝试:将常量对象改为指针在构造函数中初始化-new在析构函数中释放-free]是的没有看错new-free 我使用这一种奇怪的组合因为使用delete会导致另外一种奔溃 没有崩溃但是并没有真正的解决问题
在这里插入图片描述
我在stackflow上搜索一篇文章:

字节对齐导致的栈奔溃https://stackoverflow.com/questions/58197050/pragma-packpush-without-corresponding-pop-leads-to

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值