当前位置: 首页 > news >正文

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

相关文章:

  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • 物联网系统设计初稿
  • Python xlsx 读取
  • S3C2440-启动分析
  • 2.3 js基础--DOM
  • [译]新的web应用:播下web3.0的种子
  • NSSearchPathForDirectoriesInDomains
  • ArcGIS 切片缓存紧凑文件格式分析与使用
  • CS224d Problem set 2作业
  • 一个日志输出系统的设计
  • linux内核内存管理中的pagevec结构体
  • poj_2352 线段树
  • Mac周边环境 goBASIC语言HelloWorld
  • linux内存管理系统后期的内核对zonelist的简化
  • bzoj3809: Gty的二逼妹子序列
  • 自己简单写的 事件订阅机制
  • docker-consul
  • java小心机(3)| 浅析finalize()
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Linux中的硬链接与软链接
  • Odoo domain写法及运用
  • Vue学习第二天
  • 跨域
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 什么软件可以剪辑音乐?
  • 实现菜单下拉伸展折叠效果demo
  • 手写双向链表LinkedList的几个常用功能
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • MyCAT水平分库
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (办公)springboot配置aop处理请求.
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .htaccess配置常用技巧
  • .jks文件(JAVA KeyStore)
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Core 中的路径问题
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .Net7 环境安装配置
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .net中应用SQL缓存(实例使用)
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [C#][DevPress]事件委托的使用
  • [C\C++]读入优化【技巧】
  • [C++]打开新世界的大门之C++入门
  • [C++参考]拷贝构造函数的参数必须是引用类型