Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VS2010 C++;字节对齐问题 我在VS2010有一个奇怪的C++问题,我不完全理解。 我们使用一个库(我们称之为LibA),它使用2字节对齐方式,这是在其项目设置->结构成员对齐方式中设置的。当这个库使用另一个库(LibB,具有默认对齐方式)中的代码时,在LibA中从LibB删除对象时,我会收到一个堆损坏错误_C++_Visual Studio 2010 - Fatal编程技术网

VS2010 C++;字节对齐问题 我在VS2010有一个奇怪的C++问题,我不完全理解。 我们使用一个库(我们称之为LibA),它使用2字节对齐方式,这是在其项目设置->结构成员对齐方式中设置的。当这个库使用另一个库(LibB,具有默认对齐方式)中的代码时,在LibA中从LibB删除对象时,我会收到一个堆损坏错误

VS2010 C++;字节对齐问题 我在VS2010有一个奇怪的C++问题,我不完全理解。 我们使用一个库(我们称之为LibA),它使用2字节对齐方式,这是在其项目设置->结构成员对齐方式中设置的。当这个库使用另一个库(LibB,具有默认对齐方式)中的代码时,在LibA中从LibB删除对象时,我会收到一个堆损坏错误,c++,visual-studio-2010,C++,Visual Studio 2010,我知道排列的不同是个问题,好吧 但问题是,当我通过#pragma指令将LibA中的结构设置为2字节对齐时,它可以完美地工作 有人知道是什么导致了这种行为,我可以如何解决它吗?我们有成百上千的头需要通过#pragma指令来设置,并且这个代码需要再次测试,如果可能的话,我会避免这样做 如果会导致与“其他”对齐的库发生错误,为什么首先要在项目设置中设置字节对齐 感谢您提供的任何帮助它可以完美地工作,因为您已经解决了问题。这令人惊讶吗 当libA分配了6个字节时,释放结构{char x;int y;}时

我知道排列的不同是个问题,好吧

但问题是,当我通过
#pragma
指令将LibA中的结构设置为2字节对齐时,它可以完美地工作

有人知道是什么导致了这种行为,我可以如何解决它吗?我们有成百上千的头需要通过
#pragma
指令来设置,并且这个代码需要再次测试,如果可能的话,我会避免这样做

如果会导致与“其他”对齐的库发生错误,为什么首先要在项目设置中设置字节对齐


感谢您提供的任何帮助

它可以完美地工作,因为您已经解决了问题。这令人惊讶吗

当libA分配了6个字节时,释放结构{char x;int y;}时,libB释放了8个字节,导致了这个问题


并不是每个人都在使用“其他”对齐的库,所以对于希望其结构使用更少内存的人来说,有一个选择。一些使用“其他”对齐库的人之所以这样做,是因为他们在使用其他“其他”对齐的库,并改变他们的选项来匹配,这是你可以考虑的,而不是编辑所有的标题。(但我不建议更改该选项,这只是在紧急情况下)

如果在头中定义了一个结构,您可以通过编译器选项更改其布局。。。那你就陷入了痛苦的世界。使用库时,必须确保库和使用库的代码使用完全相同的编译器选项编译。我知道下面的问题。我不明白的是,如果我在代码中通过#pragma设置字节对齐方式(有效),或者通过项目设置设置设置字节对齐方式(无效),会有什么不同。两种方法都将字节对齐设置为相同的值。在我看来,行为应该没有区别。哦,这是新的信息,也是新的问题。如果这两个库是由同一个编译器使用所有相同的选项构建的,包括字节对齐,那么一旦它们链接起来,所有代码都不应该知道它们来自不同的库,我不相信会有任何问题。如果它们是用不同的选项构建的,那么这种差异就是问题的根源。如果这些库都在我的控制之下,我希望通过msbuild导入设置选项并删除所有项目特定的重写,以确保不会发生这种情况。最后,确保其中一个项目没有在结构上使用自己的pragma重写其项目级设置。