2013-09-29 2 views
0

Этот код похож на всю системную память. Почему это происходит?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

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

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

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

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

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

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

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

Добавить

delete Result; 
    delete Query; 

Для вашего цикла.

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

+0

добавления удалить запрос в конце цикла (сразу после соиЬ) делает segfault –

+0

Это ссылка, которую я использовал, я не знаю, что может вас беспокоить. http://dev.mysql.com/doc/refman/5.7/ru/connector-cpp-examples-complete-example-1.html – SJuan76

+0

Да, у меня есть удаление, если по какой-либо причине цикл должен прерываться. –

Смежные вопросы