此代码看起来像使用所有系统内存。它为什么会发生?
sql::Statement *Query;
sql::ResulSet *Result;
while(1){
Query = con->createStatement();
Result = Query->executeQuery("SELECT `Some` FROM `Table` LIMIT 1");
Result->next();
Result->close();
Query->close();
cout << "console message..." << endl;
//delete Query; SEGFAULT
}
如果我评论除cout之外的所有行,则内存不会被填充。但是使用SQL看起来像Query = con&gt; createStatement;不替换旧的Query值和Result = bla;没有替换旧值
答案 0 :(得分:2)
createStatement()
和executeQuery
正在创建新对象(您在Query
和Result
中存储的对象。除非您明确删除它们,否则它们将保留在内存中。
添加
delete Result;
delete Query;
到你的循环。
BTW,这是在连接器文档中(连同示例代码)。
答案 1 :(得分:0)
看起来谷歌没有信息。我发现了什么问题。
正如SJuan76所说,每次调用createStatement和executeQuery都是一个新对象
所以我开始做很多尝试,我想出了以下
所以让“永远运行”程序使用的代码总是使用相同的内存看起来像这样
sql::Statement *Query;
sql::ResulSet *Result;
Query = con->createStatement();
while(1){
if(!Result->isClosed()) Result->close();
delete Result;
Result = Query->executeQuery("SELECT `Some` FROM `Table` LIMIT 1");
Result->next();
cout << "console message..." << endl;
}