Какие-нибудь рекомендуемые методы отладки мне не хватает?
У меня есть глобальный объект, в котором есть член-указатель. Программная функция вызывает глобальный указатель и инициализирует его. Затем позже осуществляется доступ к указателю. По какой-то причине в режиме отладки указатель читает "NULL" вместо адреса объекта.
new
Эд пойнтер.При использовании непосредственного окна Visual Studio адрес указателя одинаков в обоих местах, поэтому у меня нет конфликта имен переменных. Указатель находится в библиотеке, которая является проектом решения, и объявлен там глобальным, а в главном приложении - "внешним". При пошаговом переходе часы наведения мыши Visual Studio показывают элемент указателя, содержащий число (ячейку памяти), но при назначении его локальной переменной эта локальная переменная становится нулевой.
Как ни странно, программа, похоже, работает в режиме выпуска. Тот факт, что отладочная версия является flakey, вызывает беспокойство.
У кого-нибудь есть какие-нибудь идеи, чтобы помочь отладить это дальше?
Спасибо!
Что я уже пробовал:
Я попытался переместить инициализацию члена в строку прямо перед доступом:
gDwlGlobals->setupItemsNeedingHwnd(); //Initialize 'dialogs' void * address = &gDwlGlobals->dialogs; //For debugging, to see address dwl::WinDialogs * d = gDwlGlobals->dialogs; //Here it is NULL, even though I just //stepped through and watched it initialize d = gDialogs; //If, when I initialize it in 'setupItems...', I create another global //pointer and assign the memory address to it, and use that instead //of the main gDwlGlobal->dialogs, it will show up correctly here!
Это не сработало, хотя второе назначение на второстепенный глобус действительно сработало.
Еще одна подсказка заключается в том, что действие "наведения" в отладчике, где я беру адрес указателя как void*, показывает, что адрес находится на расстоянии 20 байт от значения, заданного непосредственным окном. Что может быть причиной этого?