Возможно, куча коррупции, но может ли это быть чем-то другим?

У меня есть следующий код 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.

0

Решение

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

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

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