首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行时检查失败#2 -变量'ex‘周围的堆栈已损坏。

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

Stack Overflow用户
提问于 2014-05-13 13:58:07
回答 1查看 993关注 0票数 0

我得到运行时异常;

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

下面的代码。

代码语言:javascript
运行
复制
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检测代码检测到基于堆栈的缓冲区溢出。

EN

回答 1

Stack Overflow用户

发布于 2014-05-13 14:13:32

正如MSDN所指出的:当您将字符串作为可选参数传递时,必须显式地将其转换为LPCTSTR。

此外,这个文章指出了如果不这样做的后果。

如果可以将类型SQLString转换为LPCTSTR,请更改以下行:

代码语言:javascript
运行
复制
hostInfo.Format("tcp://%s:%d", m_loginInfo.hostName, m_loginInfo.portNumber);

至:

代码语言:javascript
运行
复制
hostInfo.Format(_T("tcp://%s:%d"), LPCTSTR(m_loginInfo.hostName), LPCTSTR(m_loginInfo.portNumber));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23633341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档