字节对齐问题 --- 莫名其妙的crash

今天碰到了一个莫名其妙的crash。

声明了一个对象。啥都没干。函数返回的时候,就报告栈损坏了。

 

void save(const wchar_t* file)

{

     xXmlDocument doc;

     return ;

}

 

这样就挂了。把doc改成指针,然后delete , 一样报告堆坏了。

 

百思不得要领。

 

打印了一下xXmlDocument的sizeof()。发现,这个函数里是124。在xXmlDocument析构函数里是128

 

Orz...

 

 

接上回。

查了好久,不知道怎么回事。后来发现,就在那个工程里,有这样的问题。

进一步发现,只有使用了自己的stl allocator的std::map才会有这个问题。

但是依然不知道哪里出错了。无望的时候开始想,会不会其他头文件干扰了xXmlDocument.h里的对齐呢?

遂吧 #include "xXmlDocument.h"放到最前面。。。果然解决了。。。

一个个排除,最终发现出问题的头文件里是这样写的。

 

#pragma pack(push , 1)

#include "xvec2.h"

#include "...."

.....

#pragma pack(pop)

 

这个代码中。#pragma pack(push , 1) 能起作用。但是pop却不起作用。

当初是为了图省事,把整个数学库的pack用这个方式都设置成1了。

没想到,竟然会有这样的问题。

 

把#pragma pack 放到每一个头文件中。于是问题解决。

 

 

 

 

 

 

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值