我对VS2010中的c ++有一个奇怪的问题我还不完全明白。 我们使用一个库(我们称之为 LibA ),它使用 2字节对齐,它在项目设置 - >中设置。结构成员对齐。当这个库使用另一个( LibB ,具有默认对齐)的代码时,我从 LibA 中的 LibB 中删除对象时出现堆损坏错误
我认为对齐方面的差异是个问题,很好。
但问题是,当我通过#pragma
指令将LibA中的结构设置为2字节对齐时,它可以完美地运行。
有谁知道导致这种行为的原因以及我如何解决这个问题?我们有由#pragma
指令设置的Headers的hundrets,并且这个代码将再次进行测试,如果可能的话我会避免这样做。
为什么可以选择在项目设置中首先设置字节对齐,如果它导致“其他”对齐库的错误。
感谢任何帮助
答案 0 :(得分:0)
它可以完美地运行,因为您已将问题修复为对齐方式。那令人惊讶吗?
问题是由libB在释放struct {char x时释放8个字节引起的? int y;当libA分配6个字节时。
不是每个人都在使用"其他"对齐的库,所以对于那些希望他们的结构使用更少内存的人来说,可以选择它。有些人使用"其他"对齐的图书馆正在这样做,因为他们正在使用其他"其他"对齐库并更改其匹配选项 - 您可以考虑的事项,而不是编辑所有这些标题。 (但我不建议改变这个选项,它只适用于紧急情况)