Работаю с постгрес из с++
Для очистки памяти от результатов запроса использую 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(); был один и не в том месте