我得到运行时异常;
运行时检查失败#2 -变量'ex‘周围的堆栈已损坏。
下面的代码。
DBConnPtr CDBConnector::GetConnectionInstance()
{
if (m_pConn)
return m_pConn;
if (m_loginInfo.hostName.IsEmpty() ||
m_loginInfo.portNumber == 0 ||
m_loginInfo.userName.IsEmpty())
return m_pConn;
CString hostInfo(_T(""));
hostInfo.Format("tcp://%s:%d", m_loginInfo.hostName, m_loginInfo.portNumber);
sql::SQLString host = hostInfo;
sql::SQLString user = m_loginInfo.userName;
sql::SQLString pwd = m_loginInfo.userPwd;
try
{
sql::Driver* pDriver = get_driver_instance();
m_pConn = (DBConnPtr)pDriver->connect(host, user, pwd);
}
catch (sql::SQLException ex)
{
}
//mysql_thread_end();
return m_pConn;
}在将sql::SQLString pwd = m_loginInfo.userPwd;移出try块之前,它通常会抛出
运行时检查失败#2 -堆周围的变量'pwd‘已损坏。
知道为什么吗?我正在使用mysql库,并试图捕获发生在SQLException调用中的connect。
编辑
输入每个CString到LPCTSTR后的输出窗口:
MyApp.exe中0x75B61D4D处的第一次机会异常: Microsoft C++异常: sql::SQLException位于内存位置0x0493F8C0。 MyApp.exe中0x75B61D4D处的第一次机会异常: Microsoft C++异常: sql::SQLException位于内存位置0x0493F8C0。 MyApp.exe中0x005E18A5处的未处理异常:堆栈cookie检测代码检测到基于堆栈的缓冲区溢出。
发布于 2014-05-13 14:13:32
正如MSDN所指出的:当您将字符串作为可选参数传递时,必须显式地将其转换为LPCTSTR。
此外,这个文章指出了如果不这样做的后果。
如果可以将类型SQLString转换为LPCTSTR,请更改以下行:
hostInfo.Format("tcp://%s:%d", m_loginInfo.hostName, m_loginInfo.portNumber);至:
hostInfo.Format(_T("tcp://%s:%d"), LPCTSTR(m_loginInfo.hostName), LPCTSTR(m_loginInfo.portNumber));https://stackoverflow.com/questions/23633341
复制相似问题