如下
//我传递了一个类对象的指针近进来
LoadForm(CFormInfo *pInfo)
{
//此时pInfo 值为0x1a04fd84
//--------------
R_Form_Info finfo;
memset(&finfo,0,sizeof(R_Form_Info));
m_RF.Seek(nFormOffset,CFile::begin);
//读文件
m_RF.Read(&finfo,nFormDataLen);
////pInfo 值变成了0xcdcdcdcd 会出现异常
pInfo->nSrBmpID = finfo.dwBkBmpID;
}
请问究竟是哪里引起的,什么原因啊,仔细检查了代码,都初始化了 没发现什么野指针啊
pInfo对象初始化了直接拿过来装载数据
而且是一个单线程 不可能被外面调用
//读文件 这么关键的操作竟然没有贴出来
问题应该就出在读文件这里.
可以试试
LoadForm(CFormInfo * const pInfo)
另外:
由于代码比较简单,你可以逐行测试的。
把pInfo-> nSrBmpID = finfo.dwBkBmpID;
前面的代码全部注释,然后一行行的增加看是哪个部分出的问题。
nFormDataLen没看到你赋值啊。。(nFormDataLen应当=sizeof(finfo)才行吧)
可能是个很大值哦。
而finfo是临时变量,在堆栈里头的,
pInfo这个指针本身也正好是在堆栈里头,并且地址比&finfo高一点点,
所以一旦
m_RF.Read(&finfo,nFormDataLen);
堆栈就被破坏了。