我遇到了MySQL++的问题,迫切需要帮助。我使用的是Visual Studio2010、MySQL++ v3.1.0和MySQL v5.1.59( x86 & x64 );所有的库都已正确编译。此错误仅出现在调试版本中,原因是编译器设置"Both (/RTC1,equiv. to /RTCsu) (/RTC1)“为on。
编辑:我应该注意到这只在Debug版本中发生。在发行版中,它的工作方式就像一个护身符,我已经将这个问题追溯到mysqlpp_d.dll,由于引用计数,MySQL++对象在那里的析构函数上崩溃。它抱怨无法访问ref计数器的内存,当它试图减少它时,它会崩溃。至少我是这么认为的。
我试着这样做是为了确保所有东西都以正确的顺序被释放和删除(即使它是不相关的,但我希望它能帮助我找到真正的问题):http://pastebin.com/Ru0uYcy9
它崩溃的原因是:
Launcher.exe: 0xC0000005中0x000007feeef5dd4c (mysqlpp_d.dll)处的第一次机会异常:写入位置0x000007feeeff5148的访问冲突。Launcher.exe: 0xC0000005中0x000007feeef5dd4c (mysqlpp_d.dll)处的未处理异常:写入位置0x000007feeeff5148的访问冲突。
发布于 2011-09-20 12:51:19
这段代码有一个严重的错误:
mysqlpp::UseQueryResult res;
{
mysqlpp::Query query = conn.query();
query << "SELECT USER();";
res = query.use();
row = res.fetch_row();
}您没有使用所有的结果集。在MySQL中,返回数据的存储过程至少返回两个单独的结果集:第一个是您请求的结果集,第二个是关于调用本身的状态信息。有关处理此问题的正确方法,请参阅MySQL++源代码发行版中的examples/multiquery.cpp。另请参阅MySQL++用户手册中的section 3.16。
这样做的主要后果是,以后对同一连接的查询将失败。
我认为内存损坏实际上是次要影响,主要问题源于忽略了MySQL C应用编程接口的尝试,即您试图在同一连接上运行两个重叠的查询,因为您没有使用整个第一个结果集。从您发布的少量代码中,我可以看出您忽略了返回的错误代码,所以如果您还禁用了MySQL++异常,您的代码将完全忽略此错误,并轻松地继续践踏所有不应该执行的操作。
顺便说一下,请在查询中去掉尾随的分号。C API不需要它,并且可能会引起混淆,特别是在面对多个查询时。仅使用分号分隔单个查询中的多个语句。
https://stackoverflow.com/questions/7458601
复制相似问题