0

这个函数在返回线上崩溃:

string questionmsg(string user, sql::Statement *stmt)
{

sql::ResultSet *res;// ...
res = stmt->executeQuery("SELECT questionmsg FROM `life-checker` WHERE `user` = '" + user + "';");
res->next();
string id = res->getString(1);

delete res;
delete stmt;

return id; //crash here - Unhandled exception Access violation
}

这是主要的:

int main()
{
    sql::mysql::MySQL_Driver *driver;
    sql::Connection *con;
    sql::Statement *stmt;

    // ...
    driver = sql::mysql::get_mysql_driver_instance();
    cout<<"Connecting to database...\n";
con = driver->connect("tcp://xxx.xxx.xxx.xxx:3306", "xxxxx_user", "xxxxx_pass!");
con->setSchema("mrhowtos_main");

stmt = con->createStatement();
// ...



cout << questionmsg("Nolan", stmt);




delete con;
cout<<"done\n";
system("PAUSE");
    return 0;
}

我正在逐步查看变量。id = res->getString(1); 的结果 正是我所期望的,一个小句子。所以我不知道它为什么会崩溃。在查看变量时我注意到的一件事是在删除 res 和 stmt 行之后。监视框中的变量值不会改变,就像它实际上并没有删除它们一样。但我不知道它应该是这样出现的。

4

1 回答 1

0

你确定你拥有res的内存吗?同样对于字符串 id,它仍然可以指向您已经释放的空间吗?

于 2013-09-05T04:05:03.860 回答