Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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
C++与外部库的内存问题_C++_Memory_Alignment_Memory Alignment - Fatal编程技术网

C++与外部库的内存问题

C++与外部库的内存问题,c++,memory,alignment,memory-alignment,C++,Memory,Alignment,Memory Alignment,我在一家商业公司工作,我们有很多内部库可以用于不同的项目。我刚刚遇到了严重的内存问题,其中一个库真的很奇怪 源代码是保密的,所以我不能把它放在这里,我将模拟一些代码来描述发生在我身上的事情 库中定义了一些类: class ClassB { public: ... static ClassB* acquireInstance(); }; class ClassA { public: ClassB* getB() { return m_pB; } bool init(Cl

我在一家商业公司工作,我们有很多内部库可以用于不同的项目。我刚刚遇到了严重的内存问题,其中一个库真的很奇怪

源代码是保密的,所以我不能把它放在这里,我将模拟一些代码来描述发生在我身上的事情

库中定义了一些类:

class ClassB
{
public:
   ...
   static ClassB* acquireInstance();
};
class ClassA
{
public:
    ClassB* getB() { return m_pB; }
    bool init(ClassB* pB);
private:
    classB* m_pB;
};

we integrated this library(static linked) in our project, our code looks like this:

void Foo()
{
   ...
   ClassB* pB = ClassB::acquireInstance();
   ClassA a;
   a.init(pB); // I step into this function, the m_pB is properly assigned with pB, everything was OK inside this function.
   ASSERT(pB == a.getB()); // Failed
}
评论:

我发现了一件奇怪的事情:当我进入init函数时,m_pB&m_pB的地址是0x0000ce08,但是m_pB&a.m_pB的地址变为0x0000ce00

我认为这可能是一个字节对齐问题,我们的项目和库之间的配置不同。但我不确定

以前有没有人遇到过这样的问题,知道如何解决吗


如有任何意见,将不胜感激。谢谢。

我猜,您有两个用不同的ClassA定义构建的模块。他们对对象的二进制布局不一致。查找最近引入的新成员变量,或现有成员从32位类型更改为64位类型,或类似的内容。是否混合调试版本和发布版本?尝试匹配版本。@Sahu,不,我没有混合调试版本和发布版本。这一点我是肯定的。但Igor提醒我忘了检查,classA中定义了一些宏,用于支持默认平台或功能,我将检查这些宏,以确保我们定义了相同的宏。谢谢大家:我将发布我的调查更新。嗨,伙计们,我已经找到了原因,这是由不同的宏定义引起的。多亏了伊戈尔!还要感谢萨胡: