Коннектор Mysql c ++, использующий всю системную память

Этот код выглядит как использование всей системной памяти. Почему это случилось?

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> createStatement; не заменяет старое значение Query и Result = bla; не заменяет старое значение

0

Решение

createStatement() а также executeQuery создаем новые объекты (которые вы храните в Query а также Result, Если вы явно не удалите их, они останутся в памяти.

добавлять

  delete Result;
delete Query;

К твоему кругу.

Кстати, это в документации к разъему (вместе с примером кода).

2

Другие решения

Ну, похоже, в Google нет информации. Я нашел в чем проблема.

как сказал SJuan76, каждый вызов createStatement и executeQuery является новым объектом

Итак, я начал делать много попыток, и я понял из следующего

  1. Используйте createStatement только один раз
  2. Перед удалением результата проверьте, открыты ли они и закрыты
  3. Удалить Respuesta
  4. Удалите только con и Query в конце программы auto_ptr (иногда это ваш друг)

Таким образом, код для того, чтобы «вечно работающая» программа использовала всегда одну и ту же память, должна выглядеть так

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;
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector