Windows — Переменные Visual C ++ 2008 перекрываются в памяти

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

Это какая-то известная ошибка, есть ли обходной путь или я что-то упустил в своем коде?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]