У меня есть следующий код C ++, работающий в многопоточной среде:
A* a = (A*) (_x->b);
a->DoStuff();
A
это конкретный класс, _x
является членом A
(скажем, типа X*
) а также b
это void *
,
К тому же, this
также A*
и у него другое расположение в памяти, но данные, аналогичные тем, что показывает дамп, находятся в _x->b
,
Я сталкиваюсь с необъяснимым сбоем при разыменовании. Созданный файл дампа очень подробный, и он показывает мне, что _x
в хорошем состоянии и _x->b
указывает на действительный ненулевой адрес памяти. Дамп также показывает, что при втором утверждении a
0, что является причиной сбоя в первую очередь.
Мой вопрос: является ли причиной этого сбоя явное повреждение кучи, или это может быть что-то более фундаментальное? Я планирую отладить это с помощью инструментов отслеживания кучи, таких как gflags или valgrind, но мне было любопытно, есть ли какая-либо другая причина, по которой, казалось бы, действительный указатель каким-то образом станет нулевым после приведения в стиле c.
Задача ещё не решена.
Других решений пока нет …