`
izuoyan
  • 浏览: 8943799 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

字节对齐问题 --- 莫名其妙的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 放到每一个头文件中。于是问题解决。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics