使用MySQL++抛出EXC_BAD_ACCESS
Using MySQL++ throws EXC_BAD_ACCESS
我正试图用以下代码连接到MySQL数据库。但它一到达"Query Query=con.Query()"行就抛出EXC_BAD_ACCESS。原因可能是什么?提前感谢!
#include <iostream>
#include <mysql++/mysql++.h>
using namespace mysqlpp;
int main(int argc, const char * argv[])
{
try {
Connection conn(false);
if (conn.connect("db", "localhost", "root", "root")) {
Query query = conn.query("select * from django_site");
}
}
catch (BadQuery er) {
std::cerr << "Error: " << er.what();
return -1;
} catch (const BadConversion& er) {
// Handle bad conversions
std::cerr << "Conversion error: " << er.what() << std::endl <<
"tretrieved data size: " << er.retrieved <<
", actual size: " << er.actual_size << std::endl;
return -1;
} catch (const Exception& er) {
// Catch-all for any other MySQL++ exceptions
std::cerr << "Error: " << er.what() << std::endl;
return -1;
}
return 0;
}
打印conn对象返回
(mysqlpp::Connection) conn = {
mysqlpp::OptionalExceptions = {
exceptions_ = false
}
error_message_ = "xe5$}xffx7f"
driver_ = 0x00007fff5fc005a8
co
更麻烦的是"conn_"变量指向空
(mysqlpp::Query) query = {
std::__1::ostream = {
std::__1::basic_ios<char, std::__1::char_traits<char> > = {
std::__1::ios_base = {
__fmtflags_ = 0
__precision_ = 0
__width_ = 0
__rdstate_ = 0
__exceptions_ = 0
__rdbuf_ = 0x0000000000000000
__loc_ = 0x0000000000000000
__fn_ = 0x0000000000000000
__index_ = 0x0000000000000000
__event_size_ = 0
__event_cap_ = 0
__iarray_ = 0x0000000000000000
__iarray_size_ = 0
__iarray_cap_ = 0
__parray_ = 0x0000000000000000
__parray_size_ = 0
__parray_cap_ = 0
}
__tie_ = 0x0000000000000000
__fill_ = 0
}
}
mysqlpp::OptionalExceptions = {
exceptions_ = false
}
template_defaults = {
std::__1::vector<mysqlpp::SQLTypeAdapter, std::__1::allocator<mysqlpp::SQLTypeAdapter> > = size=0 {}
parent_ = 0x0000000000000000
processing_ = false
}
conn_ = 0x0000000000000000
copacetic_ = false
parse_elems_ = size=0 {}
parsed_names_ = size=0 {}
parsed_nums_ = size=0 {}
sbuffer_ = {
std::__1::basic_streambuf<char, std::__1::char_traits<char> > = {
__loc_ = {
__locale_ = 0x0000000000000000
}
__binp_ = 0x0000000000000000
__ninp_ = 0x0000000000000000
__einp_ = 0x0000000000000000
__bout_ = 0x0000000000000000
__nout_ = 0x0000000000000000
__eout_ = 0x0000000000000000
}
__str_ = ""
__hm_ = 0x0000000000000000
__mode_ = 0
}
}
在创建查询之前,您没有检查connect()调用的返回类型。调用
Query query = conn.query();
如果connect()失败,则可能是导致此异常的原因。
根据手册页面http://tangentsoft.net/mysql++/doc/html/refman/classmysqlpp_1_1Query.html将NULL char*
传递给Connection::query()
函数是有效的,因为这是默认参数,所以我认为您的数据库连接请求失败了。我会检查的退货类型
conn.connect("db", "localhost", "root", "root");
并仔细检查您传递给该函数的数据库名称、用户名和密码字符串。
此外,请检查您的应用程序是否具有作为root
连接到数据库所需的权限。
我应该早点回复的。对于其他遇到同样问题的人来说,我认为错误的原因很愚蠢。事实证明,我使用的是C++11的std库,但MySQL++最初并不是针对它编译的。用更新的std lib重新编译MySQL++解决了这个问题。
相关文章:
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- Qt QXmlStreamReader Access Violation
- "Access is Denied" U盘上的创建文件()
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 例外:'Access violation reading location'
- 向量数组"Cannot access memory at address"
- Windeployqt不会运行,"Access is denied."
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 我在发布模式下运行时收到"Access violation reading location"错误 - C++
- Access C++ Enum from Swift
- Java 本机访问代码错误:"Invalid memory access"
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 如何获得私人会员的"read access"?
- 将数据添加到 CArray 会产生错误"cannot access private member declared in class 'CObject'"
- Bad Linux Memory Map File Performance with Random Access C++ & Python