关于字节对齐与HEAP CORRUPTION DETECTED错误

本文探讨了在不同文件中使用结构体时字节对齐的重要性,特别是当结构体A在头文件中定义并被其他类或结构体B使用时。如果不正确地处理对齐方式,可能会导致内存越界错误,文中还提到了如何通过VS2005的内存工具进行检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#pragma pack(字节数)
#pragma pack()


如果在头文件中声明的结构体A使用了字节对齐与默认对齐规则不一致。
而另外文件中的其他类或结构体B使用了该结构体A,则B应该使用字节显式对齐,否则可能引起错误。
sizeof(B) 与B实际的大小不一定一致,因为编译器可能额外的对B进行了处理,而这种处理NEW 和 DELETE是不知道的。
NEW 和 DELETE 就有可能出现内存越界错误。

NEW    C(16)
DELETE C(16)
可能优化后的C是13,对C中最后一个成员变量改变了值可能导致C(16)后面的FDFDFDFD值发生变化,引起内存越界错误

 

可以通过VS2005查看内存工具(视图---》其他窗口---》命令窗口--》memory),发现new 一个类时候的操作,与delete时的处理。

 

错误:

HEAP CORRUPTION DETECTED: after %hs block (#%d) at 0x%p./n"
                    "CRT detected that the application wrote to memory after end of heap buffer./n",

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值