MySQL++-运行时检查失败#2-变量周围的堆栈已损坏
MySQL++ - Run-Time Check Failure #2 - Stack around the variable was corrupted
im在MySQL++方面遇到问题,急需帮助。我使用的是Visual Studio 2010、MySQL++v3.1.0和MySQL v.1.59(x86和x64(;所有Library的都已正确编译。此错误仅在调试版本中发生,因为编译器设置"Both(/RTC1,equival.to/RTCsu((/RTC2("处于启用状态。
编辑:我应该注意,这只发生在调试版本。在Release中,它就像一个符咒我已经将问题追溯到mysqlpp_d.dll,MySQL++对象由于引用计数而在那里的析构函数上崩溃。它抱怨无法访问ref计数器的内存,当它试图减少内存时,它会崩溃。至少我认为会发生这种事。
我试着这样做是为了确保所有的东西都能按正确的顺序被删除(即使它无关紧要,但我希望它能帮助我找到真正的问题(:http://pastebin.com/Ru0uYcy9
它崩溃了:
Launcher.exe中0x000007feeeff5dd4c(mysqlpp_d.dll(处的首次机会异常:0xC0000005:写入位置0x000007feeff5148的访问冲突。Launcher.exe中0x000007feeeff5dd4c(mysqlpp_d.dll(处未处理的异常:0xC0000005:写入位置0x000007feeff5148时发生访问冲突。
在这里断裂:http://pastebin.com/9Mfr7NwB
此代码有一个严重的错误:
mysqlpp::UseQueryResult res;
{
mysqlpp::Query query = conn.query();
query << "SELECT USER();";
res = query.use();
row = res.fetch_row();
}
您并没有消耗所有的结果集。在MySQL中,返回数据的存储过程至少返回两个独立的结果集:第一个是您请求的结果,第二个是关于调用本身的状态信息。有关处理此问题的正确方法,请参阅MySQL++源代码发行版中的examples/multiquery.cpp
。另请参阅MySQL++用户手册中的3.16节。
这样做的主要后果是以后对同一连接的查询将失败。
我认为您的内存损坏实际上是次要影响,而主要问题源于忽略MySQL C API试图告诉您您正试图在同一连接上运行两个重叠的查询,因为您没有使用整个第一个结果集。从你发布的小代码中,我可以看出你忽略了返回的错误代码,所以如果你也禁用了MySQL++异常,你的代码将完全忽略这个错误,并愉快地继续践踏它不应该做的事情。
顺便说一句,请在查询中去掉尾随的分号。C API不需要它,并且可能导致混乱,尤其是在多查询的情况下。仅使用分号来分隔单个查询中的多个语句。
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 变量周围的堆栈'sortArray'已损坏
- 变量周围的堆栈'folderPath'已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- C++:此代码可以编译,但引发运行时检查失败 #2 - 围绕变量周围的堆栈'num'已损坏。发生
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量周围的堆栈'k'已损坏
- 运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏
- 数组问题:变量周围的堆栈'arr'已损坏
- 运行时间检查:变量周围的堆栈已损坏
- 变量周围的堆栈'Yarray'已损坏
- 变量"name"周围的堆栈已损坏C++
- 运行时检查失败#2 - 变量周围的堆栈'myArray'已损坏.- 似乎无法弄清楚如何删除此错误
- MS 工作室 17 变量周围的堆栈已损坏
- 在 c++ 中 int 数组周围堆栈损坏错误