关于字节对齐与HEAP CORRUPTION DETECTED错误
2011-03-28 10:58
369 查看
#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",
#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",