
Code
char* m_sErrorMessage="";//数据库操作类的成员变量
try{
pRecordset = m_pConnection->Execute(_bstr_tsqlString),&vRecordsAffected,adCmdText) ;
return true;
}
catch (CException* ex)
{
ex->GetErrorMessage(m_sErrorMessage,255);
return false;
}
catch(_com_error e)
{
CString tchStr=e.ErrorMessage();
m_sErrorMessage=(LPSTR)(LPCTSTR)tchStr;
return false;
}
catch()
{
m_sErrorMessage="查询记录时遇到未知错误!!";
return false;
}
当走到m_sErrorMessage=(LPSTR)(LPCTSTR)tchStr 一步后,m_sErrorMessage有正常值,但走完return false后m_sErrorMessage指针错误,原因是tchStr为局部变量,而m_sErrorMessage=(LPSTR)(LPCTSTR)tchStr 让m_sErrorMessage指针指向了要被销毁的局部变量。
解决方法:把m_sErrorMessage声明为std::string, ex->GetErrorMessage(m_sErrorMessage,255)处则先用char m_chErrorMessage[255]获取错误信息,再直接 m_sErrorMessage=m_chErrorMessage赋值