今天碰到了一个莫名其妙的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 放到每一个头文件中。于是问题解决。
分享到:
相关推荐
amr-nb格式的使用,非字节对齐转换成字节对齐的源码。基于这份源码,可以理解两者格式的差别,并且实现代码的转换。最终使用opencore-amr库,可以实现解码。
对于字节占用与对齐,excel表格中做了稍微修改,与12-27号版本比较,代码没有改动。
关于C语言中的结构体字节对齐问题,在《C与指针》一书中提到,但是似乎没有说清楚,还是我理解不完全?所以,根据书上和网上资料,总结一些关于C语言中的结构体字节对齐的知识。这里的讨论和代码,都在VS2010下,GCC...
本文主要讲了什么是字节对齐,为什么要对齐,已经应该注意的一些问题,下面一起来看看
本文就C语言中字节对齐的问题进行详细的解析,感性趣的朋友可以看看。
写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧.
多字节与UTF-8、Unicode之间的转换 ,里面有相互转换的6个函数 ,稍微修改下可以加到自己的c++程序中,比较好用
字节流---马克-to-win java视频的详细介绍与描述 stream
总结了字节对齐的一些规则,主要是结构体里边界填充后的字节对齐问题。
嵌入式编程规范 字节对齐 嵌入式编程规范 字节对齐 嵌入式编程规范 字节对齐 嵌入式编程规范 字节对齐
结构体字节对齐规则,主要是介绍结构体字节对齐规则,内容有点长,但是很全面.
什么是字节对齐,为什么要对齐 现代计算机中内存空间都是按照BYTE划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种...
主要介绍了java 解决异常 2 字节的 UTF-8 序列的字节 2 无效的问题的相关资料,需要的朋友可以参考下
结构体的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题。这些问题在平时编程的时候也确实不怎么用到,但在一些笔试面试题目中出是常常出现,对sizeof我们将在另一篇文章中...
本文以程序实例阐述了,如何在程序当中实现任意字节对齐。
字节对齐详解,真的很有用地啊,希望大家支持我,有些问题挺经典的
字节跳动(--)2019年企业社会责任报告-字节跳动-202006精品报告2020.pdf
本文档从硬件角度讲述产生字节对齐的根本原因,并对字节对齐的多种情况作了较为详细的说明,并对字节对齐产生的一些影响做了说明
c++内存中字节对齐问题详解
深入字节码 -- 玩转 ASM-Bytecode1