在字符串析构函数中读取访问冲突

时间:2018-04-25 17:56:35

标签: c++ oracle exception occi

字符串析构函数如何抛出异常? 它在变量s的try块结束时抛出。

Environment *env = Environment::createEnvironment(Environment::DEFAULT);
Connection *con;
con = env->createConnection(Config::login, Config::password, Config::connection_string);


string sqlStmt = "SELECT user FROM dual";
auto stmt = con->createStatement(sqlStmt);
ResultSet *rset = stmt->executeQuery();
try {
    rset->next();
    string s = rset->getString(1);
    cout << "user: " << s << endl;
}  // exception thrown here
  

读取访问冲突_Pnext为0xFFFFFFFFFFFFFFF

2 个答案:

答案 0 :(得分:0)

问题是CRT库的版本不同。您的应用程序和Oracle的CRT库版本必须匹配。

答案 1 :(得分:0)

似乎不是std :: string异常。

那个裸露的rset-> next()是不明智的。应该先检查rset,更重要的是,如果(rset-> next()){..your code ..}是保护您免受自身侵害的常规方式。

只需检查:

if (rset->next() == Status::DATA_AVAILABLE) {
   auto s = rset->getString(1);
}