我有一个奇怪的问题。我有一个程序,我在其中使用了一些静态变量(其中一些是包括其他变量的对象),其中一些似乎在_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 中遇到过这种情况吗?
这是一些已知的错误,是否有解决方法或者我的代码中缺少某些内容?