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中定义了一些宏,用于支持默认平台或功能,我将检查这些宏,以确保我们定义了相同的宏。谢谢大家:我将发布我的调查更新。嗨,伙计们,我已经找到了原因,这是由不同的宏定义引起的。多亏了伊戈尔!还要感谢萨胡: