繁体   English   中英

运行时检查失败#2-变量'ex'周围的堆栈已损坏

[英]Run-Time Check Failure #2 - Stack around the variable 'ex' was corrupted

我得到了运行时异常;

运行时检查失败#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库并尝试捕获在connect调用中发生的SQLException。

编辑

将每个CString类型转换为LPCTSTR之后的输出窗口:

MyApp.exe中0x75B61D4D的首次机会异常:Microsoft C ++异常:内存位置0x0493F8C0处的sql :: SQLException。
MyApp.exe中0x75B61D4D的首次机会异常:Microsoft C ++异常:内存位置0x0493F8C0处的sql :: SQLException。
MyApp.exe中0x005E18A5处未处理的异常:堆栈cookie工具代码检测到基于堆栈的缓冲区溢出。

正如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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM