Вложенные PQclear();

Работаю с постгрес из с++

Для очистки памяти от результатов запроса использую PQclear():

Есть два запроса в цикле

PGresult* res_1;
PGresult* res_2;
 
zapr="Select * fromе table1;
res_1=PQexec(p_pgconn_my_db, zapr.c_str());
 
for(i=0; i<PQntuples(res_1); i++){
zapr="SELECT * FROMе table2 WHERE  pole1=PQgetvalue(res_1, 0, 0);
res_2=PQexec(p_pgconn_my_db, zapr.c_str());
PQclear(res_2); 
}
 
PQclear(res_1);

Так вот проблема в том что у меня PQclear(res_2); освобождает память для res_1, а не для res_2 это такая особеность длл постгрес для с++ или глюк моей проги ?
Раньше вроде все работало нормально, но я особо не проверял, а тут прога зависла и я нашел что причина в том что очиска памяти идет не для того запроса.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

обнаружил что проблема

обнаружил что проблема начинается когда я присваиваю результаты запроса res_2
Результаты почему то записываются в res_1 и res_2 одновременно

И эта ошибка происходит не всегда

Я не нашёл в документации

Я не нашёл в документации ничего про необходимость выделения памяти, возможно проблема как раз в этом.

А код ваш очень плох:
1. Почему вы не проверяете результат полученный в PQexec?
2. Зачем вы в цикле каждый раз мучаете PQntuples(res_1), когда достаточно ОДИН раз перед циклом её вызвать, поместить результат в перменную типа int и в цикле уже использовать эту переменную, которая один раз вычислена и навсегда?
это навскидку. может если бы привели фрагмент кода более полно, ещё чего-либо нашлось бы (например у вас в приведённом коде нет объявления zapr)

Спасибо за совет по коду

Спасибо за совет по коду исправлюсь
Проблема была в том что в предыдущем запросе не правильно чистилась память PQclear();
Был такой же вложенный запрос но вместо двух PQclear(); был один и не в том месте

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023