如果我在新项目中使用相同的代码,为什么在项目和工作程序中出现访问冲突?

时间:2013-04-08 12:34:22

标签: c++ visual-studio-2010 mysql-connector

如果我从mysql C ++连接器插入一些示例代码,我的项目编译正常,但程序崩溃:

Unhandled exception at 0x552CEB8C (msvcr110d.dll) in comClient.exe: 0xC0000005: Access violation reading location 0x63697274.

如果我在一个新项目中使用完全相同的代码,它可以正常工作,完全按照它应该做的。

为什么它在我的项目中不起作用?

以下是我正在使用的内容:

try { 
 sql::Driver *driver; 
 sql::Connection *con; 
 sql::Statement *stmt; 

 /* Create a connection */ 
 driver = get_driver_instance(); 
 con = driver->connect("address:port", "user", "pass"); 
 /* Connect to the MySQL test database */ 
 con->setSchema("database"); 

 stmt = con->createStatement(); 
 stmt->execute("TRUNCATE TABLE words"); 

 delete stmt; 
 delete con; 

 } catch (sql::SQLException &e) { 
 cout << "# ERR: SQLException in " << __FILE__; 
 cout << "(" << __FUNCTION__ << ") on line » " << __LINE__ << endl; 
 cout << "# ERR: " << e.what(); 
 cout << " (MySQL error code: " << e.getErrorCode(); 
 cout << ", SQLState: " << e.getSQLState() << " )" << endl; 
 }

[注]

设置一些断点后,似乎崩溃发生在:

con = driver->connect("address:port", "user", "pass");

显然使用工作地址,用户和通行证。

我正在使用main()函数中的代码。我注释掉除了这个代码之外的所有内容,即使是类包含,除了示例所需的代码之外它仍然崩溃。这是怎么回事?

[编辑]

它似乎在调试模式下工作。发布模式仍然在“driver-&gt; connect()”崩溃。

1 个答案:

答案 0 :(得分:0)

此特定问题的解决方案是在发布模式下构建连接器驱动程序和libmysql。显然,如果您在调试模式下构建它们并将生成的库与在发布模式下构建的应用程序一起使用,则会导致崩溃。

这就是为什么我的应用程序在构建调试模式时工作,但不是在发布时。

我希望这有助于其他遇到类似问题的人,花了很长时间才弄明白。

非常感谢约翰的一个非常有用的线索。它最终促使我找到了解决方案。