Ошибка проверки времени выполнения № 2 — стек вокруг переменной ex был поврежден

Я получаю исключение во время выполнения;

Ошибка проверки времени выполнения № 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:

Исключение первого шанса в 0x75B61D4D в MyApp.exe: исключение Microsoft C ++: sql :: SQLException в ячейке памяти 0x0493F8C0.
Исключение первого шанса в 0x75B61D4D в MyApp.exe: исключение Microsoft C ++: sql :: SQLException в ячейке памяти 0x0493F8C0.
Необработанное исключение в 0x005E18A5 в MyApp.exe: код инструментария cookie стека обнаружил переполнение буфера на основе стека.

0

Решение

Как 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));
0

Другие решения


По вопросам рекламы [email protected]