У меня странная проблема. У меня есть программа, где я использую некоторые статические переменные (некоторые из которых являются объектами, включая другие переменные), и некоторые из них, кажется, перекрываются в памяти в _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?
Это какая-то известная ошибка, есть ли обходной путь или я что-то упустил в своем коде?
Задача ещё не решена.
Других решений пока нет …