C++使用mysql connector C++连接mysql数据库连接不上,Microsoft C++ 异常: std::bad_alloc

问题遇到的现象和发生背景

利用mysql connector C++和boost库连接C++和mysql,始终连接不成功,代码生成没问题,运行之后显示0x00007FFB6BA44FD9 处(位于 线激光传感器.exe 中)有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x000000257776F260 处。

img

问题相关代码,请勿粘贴截图

在csdn上采用的其他博主的测试代码

/*
include directly the different
headers from cppconn/ and mysql_driver.h + mysql_util.h
(and mysql_connection.h). this will reduce your build time!
*/
#include <tchar.h>
#include <jdbc/mysql_connection.h>

#include <jdbc/cppconn/driver.h>
#include <jdbc/cppconn/exception.h>
#include <jdbc/cppconn/resultset.h>
#include <jdbc/cppconn/statement.h>

#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    try {
        sql::Driver *driver;
        sql::Connection *con;
        sql::Statement *stmt;
        sql::ResultSet *res;

        /* create a connection */
        driver = get_driver_instance();
        con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
        if (con == NULL)
        {
            cout << "conn is null" << endl;
            goto end;
        }
        cout << "连接数据库服务器成功" << endl;

        /* connect to the mysql test database */
        con->setSchema("test");

        stmt = con->createStatement();
        if (stmt == NULL)
        {
            cout << "stmt is null" << endl;
            goto end;
        }

        res = stmt->executeQuery("select * from `user`;");
        int i = 0;
        while (res->next()) {
            // you can use either numeric offsets...
            cout << "id = " << res->getInt(1); // getint(1) returns the first column
            // ... or column names for accessing results.
            // the latter is recommended.
            cout << ", name = '" << res->getString("name").c_str() << "'" << endl;
            i++;
        }
        cout << "共" << i << "条" << endl;

        con->close();
        delete res;
        delete stmt;
        delete con;
    }
    catch (sql::SQLException& e)
    {
        std::cout << "# err: " << e.what();
        std::cout << " (mysql error code: " << e.getErrorCode();
        std::cout << ", sqlstate: " << e.getSQLState() << " )" << std::endl;
    }
end:
    system("pause");

    return 0;
}
运行结果及报错内容

0x00007FFB6BA44FD9 处(位于 线激光传感器.exe 中)有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x000000257776F260 处。
“线激光传感器.exe”(Win32): 已加载“D:\2021.9-\lianxi\VS\线激光传感器\x64\Debug\线激光传感器.exe”。已加载符号。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\ntdll.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\kernel32.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\KernelBase.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“D:\2021.9-\lianxi\VS\线激光传感器\线激光传感器\mysqlcppconn-9-vs14.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\advapi32.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\msvcrt.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\sechost.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\rpcrt4.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\ws2_32.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\ucrtbase.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\msvcp140d.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\vcruntime140d.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\ucrtbased.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“D:\Program Files (x86)\mysql-8.0.28-winx64\bin\libcrypto-1_1-x64.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\user32.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\win32u.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\gdi32.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\gdi32full.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\msvcp_win.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\bcrypt.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“D:\Program Files (x86)\mysql-8.0.28-winx64\bin\libssl-1_1-x64.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\msvcp140.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\secur32.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\vcruntime140.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\vcruntime140_1.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\dnsapi.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\sspicli.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\imm32.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\IPHLPAPI.DLL”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\nsi.dll”。无法查找或打开 PDB 文件。
线程 0x8c0 已退出,返回值为 0 (0x0)。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\NapiNSP.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\pnrpnsp.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\wshbth.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\nlaapi.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\mswsock.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\winrnr.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Program Files\National Instruments\Shared\mDNS Responder\nimdnsNSP.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\nimdnsResponder.dll”。无法查找或打开 PDB 文件。
“线激光传感器.exe”(Win32): 已加载“C:\Windows\System32\rasadhlp.dll”。无法查找或打开 PDB 文件。
0x00007FFB6BA44FD9 处(位于 线激光传感器.exe 中)引发的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x000000257776F260 处。
0x00007FFB6BA44FD9 处(位于 线激光传感器.exe 中)有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x000000257776F260 处。

img

我的解答思路和尝试过的方法

在网上搜索报错信息

img


不知道该如何调试了,怀疑是mysqlcppconn.lib的版本是release?实在不懂,求大家指教

我想要达到的结果

C++成功连接上mysql

刚解决这个问题,我用的是VS2022在DEBUG X64下调试运行的,在调试模式下需要下载专门的debug版本的connector,附加的包含路径和库路径记得修改

img

你确定driver 获取成功了吗