我在项目中使用MySQL Connector / C ++与MySQL数据库进行交互。该项目编译得很好。但是,当我运行它时,我收到错误
Unhandled exception at at 0x000007FEFD30B16D in ProjectName.exe:
Microsoft C++ exception: std::bad_alloc at memory location 0x00000000036FC2A0.
在第一行使用数据库。在这种情况下,我正在执行MySQL语句
sql::Statement* stmt = mSqlCon->con->createStatement();
stmt->execute("CREATE TABLE IF NOT EXISTS ..."); // Unhandled exception
当我为Release编译时,一切正常,没有错误抛出。
我的环境:
可能相关的Visual Studio项目设置和库:
_DEBUG;_MBCS;_CRT_SECURE_NO_WARNINGS
Multi-threaded Debug (/MTd)
Both (/RTC1, equiv. to /RTCsu) (/RTC1)
我的想法:
我开始使用boost库后发生此错误。这需要更改一些项目设置,例如预处理器定义_DEBUG
(无论如何都应该用于调试版本,但之前没有使用它来构建连接器)。 所以我认为问题是在项目的调试版本中使用MySQL Connector / C ++的发布版本。在发布版本中一切正常。但是,我找不到连接器的任何调试版本,我也无法自己构建或使用调试库重新安装...是否有另一种解决我的问题的方法(或者我搜索不够好)?
我读到我的MySQL文件夹debug
中应该有一个C:\Program Files\MySQL\MySQL Connector C++ 1.1.6\lib
文件夹,但它只包含一个opt
文件夹,其中包含发布版本(我正在使用)。
非常感谢任何帮助!
答案 0 :(得分:2)
是的,你是对的,问题在于将Debug配置中的项目与opt文件夹中的Release库链接。您所要做的就是在Debug配置中自己编译库的源代码:
(path\to\)cmake.exe -G "Visual Studio 14 2015 Win64" -DCMAKE_BUILD_TYPE=Debug
并运行它;通过这种方式,您告诉CMake构建一个项目,您可以使用Visual Studio 14版本编译(您可以选择其他版本,如果您想要查看类型cmake -h
),请使用调试配置的x64计算机。 MYSQLCONNCPP.sln
。如果要创建静态库,请将输出文件类型更改为静态。MYSQLCONNCPP
项目。
a)现在转到Project Properties,并将HAVE_STRUCT_TIMESPEC
添加到预处理器定义(这可以防止timespec重新定义)
b)将/EHsc
添加到C ++ - >命令行(这可以防止与异常处理程序相关的错误)
c)更改项目的运行时库以匹配要将库链接到的项目:例如,在我的情况下,我必须将其设置为/MDd
答案 1 :(得分:1)
我遇到了同样的问题。这是因为配置的差异。如果mysql包装器是一个单独的.lib文件,则可以调试客户端应用程序。如果已下载并安装了Mysql发行版,那么您需要构建一个连接/查询等包装器并将其作为发行版.lib导出到其他项目。可以使用提供的跟踪选项调试Mysql。 MYSQL DEBUG TRACE C++