최근에 libmysqlclient
을 사용하는 C 프로그램을 작성하기 시작했습니다. valgrind
으로 코드를 검사 할 때 메모리 누수가보고되었습니다. ...MySQL C API 메모리 누출?
==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()
에 따르면
닫기 횟수 : 나에게 말한다
#include <mysql.h> int main(void) { MYSQL* mysql = mysql_init(0); mysql_close(mysql); return 0; }
valgrind
와 결과 프로그램을 확인 : 다음 최소한의 코드는 동작을 재현 이전에 열린 연결. mysql_close()는 핸들이 mysql_init() 또는 mysql_connect()에 의해 자동으로 할당 된 경우 mysql이 가리키는 연결 핸들을 할당 해제한다.
그러나 valgrind
은 해제되지 않은 메모리를보고합니다. 여기 뭐가 잘못 됐니?
아마도 한번 초기화 된 내부 버퍼일까요? –
나는 이것이 로컬 타임과 친구들을 사용하여 누출을 탐지하는 valgrind와 관련이 있다고 생각한다. – Ulterior
Michael : 네 말이 맞아, 내 대답을 보라. – Philip