У меня есть код, который я написал несколько лет назад.Он работал нормально, но после недавней перестройки с каким-то новым, не связанным кодом в другом месте, он больше не работает.Это код:
//myobject.h
...
inline CMapStringToOb* GetMap(void) {return (m_lpcMap);};
...
Выше приведен доступ из основного приложения, например, так:
//otherclass.cpp
...
CMapStringToOb* lpcMap = static_cast<CMyObject*>(m_lpcBaseClass)->GetMap();
...
Как я уже сказал, это БЫЛО работать долгое время, но он просто решилначать терпеть неудачу с нашей последней сборки.Я отладил это, и я вижу, что в коде, где установлен указатель, он правильно устанавливает адрес памяти в фактическое значение.Я даже смог войти в функцию set, записать адрес памяти, затем перейти к этой функции, дать ей получить 0xfdfdfdfd, а затем вручную получить адрес памяти в отладчике.Это заставляет код работать.Итак, из того, что я прочитал, 0xfdfdfdfd означает защиту байтов или «ничейную землю», но я не совсем понимаю, каковы последствия этого.Возможно, это также означает отключение одной ошибкой, но я не понимаю, как это могло произойти, если код работал раньше.