C++函数用于工作,现在返回0xfdfdfdfd

Joe*_*e M 0 c++ pointers inline-functions

几年前我写了一些代码.它一直运行良好,但在最近在其他地方重新构建了一些新的,不相关的代码后,它已不再有效.这是代码:

//myobject.h
...
inline  CMapStringToOb* GetMap(void)    {return (m_lpcMap);};
...
Run Code Online (Sandbox Code Playgroud)

以上是从主应用程序访问,如下所示:

//otherclass.cpp
...
CMapStringToOb* lpcMap = static_cast<CMyObject*>(m_lpcBaseClass)->GetMap();
...
Run Code Online (Sandbox Code Playgroud)

就像我说的,这个WAS工作了很长时间,但它刚刚决定从我们最近的版本开始失败.我调试了这个,我能够看到,在设置指针的代码中,它正确地将内存地址设置为实际值.我甚至可以进入set函数,写下内存地址,然后转到这个函数,让它得到0xfdfdfdfd,然后在调试器中手动获取内存地址.这会导致代码工作.现在,从我所读到的,0xfdfdfdfd意味着保护字节或"没有人的土地",但我真的不明白它的含义是什么.据说它也意味着一个错误,但我不明白如果代码以前工作可能会发生这种情况.

Mar*_*k B 5

我假设您使用的是匈牙利语中的Visual Studio.由于您确实知道保存映射指针的地址,因此在调试器中启动程序并在该映射指针发生更改时设置数据断点(保存映射指针的内存,而不是指向的映射).然后你会发现它被覆盖的确切时间.