我有个程序,以前一直运行正常,后来新增加了一些功能,新增加功能的模块压根都和以前的模块没关系(独立的),并且在我的机子上运行正常。
后来修改后的程序发布到客户中使用(更新),结果运行到一个功能的时候固定会出错,错误说程序abnormal,读了哪个不能读的内存。
然后我进行调试,在我的机子怎么样试都行,别人的机子我只能远程登录过去,但是不能将代码拷到客户的机子上去,况且他们也没有VS.Net,于是我将我的代码出错的地方用:“AfxMessageBox( _T( "第1步" ) )”等等(直到第n步)来分割出错的地方,结果发现错误居然出现在如下的“第2步”到“第3步”之间:......
HRESULT hr;
try
{
AfxMessageBox( _T( "第1步" ) );
hr = ptrCmd.CreateInstance( __uuidof( Command ) );
AfxMessageBox( _T( "第2步" ) );
if( FAILED( hr ) )
_com_issue_error( hr );
AfxMessageBox( _T( "第3步" ) );
ptrCmd->ActiveConnection = g_ptrConn;
AfxMessageBox( _T( "第4步" ) );
......
}
......if( FAILED( hr ) ) 这样的语句可是标准的啊,居然是访问了不可读的内存???我怎么也不相信,然后我把这个判断删掉,结果出错的地方移到了其他地方!!!上面这个函数名称是Issue,后来我将它的名字改成Issue2,然后调整了一下他在类中的位置(将其前移了两行,将其他类函数放在它下面)结果问题解决了!!!说明:此前程序已经尝试过多次重新编译,甚至将Release目录给删除了然后在生成还是不行,这证明不是那个编译器有的Bug。谁有遇到类似的问题?请教了!