我在一家商业公司工作,我们有很多内部库可以重复用于不同的项目。我刚刚遇到了一个库的严重内存问题,这真的很奇怪。
源代码是保密的,所以我不能把它放在这里,我将模拟一些代码来描述发生在我身上的事情,
库中定义了一些类:
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。
我认为这可能是一个字节对齐问题,我们的项目和库之间有不同的配置。但我不确定,
之前有没有人遇到过这种问题,有关如何修复的想法吗?
任何输入都将不胜感激。谢谢。