Недавно я начал работать над программой на C, которая использует libmysqlclient
. При проверке моего кода с помощью valgrind
сообщалось об утечках памяти. Следующий минимальный фрагмент кода воспроизводит поведение:
#include <mysql.h>
int main(void)
{
MYSQL* mysql = mysql_init(0);
mysql_close(mysql);
return 0;
}
Проверка полученной программы с помощью valgrind
говорит мне:
==25614== LEAK SUMMARY:
==25614== definitely lost: 0 bytes in 0 blocks
==25614== indirectly lost: 0 bytes in 0 blocks
==25614== possibly lost: 0 bytes in 0 blocks
==25614== still reachable: 288 bytes in 3 blocks
==25614== suppressed: 0 bytes in 0 blocks
Согласно справочнику MySQL API, mysql_close()
...
Закрывает ранее открытое соединение. mysql_close () также освобождает дескриптор соединения, на который указывает mysql, если дескриптор был автоматически выделен mysql_init () или mysql_connect ().
Однако valgrind
сообщает о неосвобожденной памяти. Что здесь не так?