外部库的C ++内存问题

时间:2014-08-18 02:45:03

标签: c++ memory alignment memory-alignment

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

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

库中定义了一些类:

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。

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

之前有没有人遇到过这种问题,有关如何修复的想法吗?

任何输入都将不胜感激。谢谢。

0 个答案:

没有答案