0

我有一个奇怪的问题。我有一个程序,我在其中使用了一些静态变量(其中一些是包括其他变量的对象),其中一些似乎在_DEBUG_ mode. 该程序相当复杂,我还没有时间在较小的用例中重现它。所以它看起来像这样:

struct Bar  
{ 
   int i;
... 
};

class A 
{ 
public:
 Bar b;
... 
};

class B
{ 
public:
 static FOO f;
... 
 static A a;
};

然后我设置了一个断点,_tmainCRTStartup以查看我_BEFORE_的任何代码运行时会发生什么。一旦断点被​​击中,我将在 Watch 窗口中查看变量及其地址,并看到下图:

&B::f - 0x00fa68e0

&(B::a.b) - 0x00fa68cc 

sizeof(B::a.b) - 28

(0x00fa68e0 - 0x00fa68cc) = 20

因此,这些变量在内存中重叠(如果我更改“i”,另一个对象将受到影响)。我开始查看地图文件,其中 B::a 定义在0x00fa6340.

那么这是链接器还是编译器错误?尚未运行任何代码,但这里已经存在内存重叠。

您在 VS 2008 中遇到过这种情况吗?

这是一些已知的错误,是否有解决方法或者我的代码中缺少某些内容?

4

0 回答 0