Я несколько дней боролся с проблемой кучи.Сначала отладчик vs 2005 предупредил меня, что, возможно, я повредил кучу после удаления объекта, который я ранее создал.Исследование этой проблемы привело меня к gflags и настройке кучи страниц.После включения этого параметра для моего конкретного изображения, он предположительно указал мне на строку, которая фактически вызывает повреждение.
Gflags идентифицировал конструктор для рассматриваемого объекта как виновника.Объект получается следующим образом:
class POPUPS_EXPORT MLUNumber : public MLUBase
{
...
}
class POPUPS_EXPORT MLUBase : public BusinessLogicUnit
{
...
}
Я могу создать экземпляр MLUNumber в отдельном потоке без повреждения кучи.
Я могу создать другой класс, который также наследуется от MLUBase,это не приводит к повреждению кучи.
Нарушение доступа возникает из-за повреждения, возникающего на открывающей скобке конструктора, что, по-видимому, связано с неявной инициализацией объекта (?).
Конструктор базового класса (MLUBase) успешно завершает свою работу.
Из копания с окном памяти в версии 2005 года выясняется, что для фактического объекта недостаточно места.Я предполагаю, что достаточно было выделено только для базового класса.
Строка, вызывающая ошибку:
BusinessLogicUnit* biz = new MLUNumber();
Я надеюсь, что это может быть причиной, или другой неисправностьюшаг, чтобы следовать.