奇怪问题,一读文件,指针就改变了,大家帮忙看看

danglingbo   2008-2-29 11:18 楼主
如下
//我传递了一个类对象的指针近进来
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;

}
请问究竟是哪里引起的,什么原因啊,仔细检查了代码,都初始化了 没发现什么野指针啊

回复评论 (6)

是不是外面用pInfo这个指针了?
点赞  2008-2-29 11:23
pInfo对象初始化了直接拿过来装载数据
而且是一个单线程 不可能被外面调用
点赞  2008-2-29 11:36
//读文件 这么关键的操作竟然没有贴出来
问题应该就出在读文件这里.

点赞  2008-2-29 13:17
可以试试
LoadForm(CFormInfo * const pInfo)

另外:
由于代码比较简单,你可以逐行测试的。
把pInfo-> nSrBmpID   =   finfo.dwBkBmpID;
前面的代码全部注释,然后一行行的增加看是哪个部分出的问题。
点赞  2008-2-29 13:24
nFormDataLen没看到你赋值啊。。(nFormDataLen应当=sizeof(finfo)才行吧)
可能是个很大值哦。
而finfo是临时变量,在堆栈里头的,
pInfo这个指针本身也正好是在堆栈里头,并且地址比&finfo高一点点,

所以一旦
m_RF.Read(&finfo,nFormDataLen);
堆栈就被破坏了。
点赞  2008-3-1 17:01
接上:
pInfo的内容被无辜修改。
点赞  2008-3-1 17:04
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复