2010-08-29 22 views
8

मैं हाल ही में Valgrind के माध्यम से अपने ऐप्स में से एक चला रहा हूं लेकिन कुछ MYSQL संबंधित लीक हैं जिन्हें मैं ठीक नहीं कर सकता। मैंने अपमानजनक कोड को सबसे बुनियादी रूप में रखा और परीक्षण किया; मुझे वही रिसाव मिला। क्या मुझे सिर्फ उनकी उपेक्षा करनी चाहिए या क्या मैं कुछ गलत कर रहा हूं?Valgrind संभवतः खो गया - MYSQL

कोड:

gcc -g -lmysqlclient mysql_mem_test.c -o mysql_mem_test 

वेलग्रिंड आउटपुट::

#include <stdio.h> 
#include <stdlib.h> 

#include <mysql/mysql.h> 

int main() 
{ 
    MYSQL *MYSQLIns; 

    MYSQLIns = mysql_init(NULL); 

    mysql_real_connect(MYSQLIns, "localhost", "username", "password", "database", 0, NULL, 0); 

    mysql_close(MYSQLIns); 

    return EXIT_SUCCESS; 
} 

के साथ संकलित

valgrind --leak-check=full ./mysql_mem_test 
==4601== Memcheck, a memory error detector 
==4601== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al. 
==4601== Using Valgrind-3.5.0-Debian and LibVEX; rerun with -h for copyright info 
==4601== Command: ./mysql_mem_test 
==4601== 
==4601== 
==4601== HEAP SUMMARY: 
==4601==  in use at exit: 61,336 bytes in 16 blocks 
==4601== total heap usage: 70 allocs, 54 frees, 109,218 bytes allocated 
==4601== 
==4601== 24,528 bytes in 6 blocks are possibly lost in loss record 4 of 5 
==4601== at 0x4024C1C: malloc (vg_replace_malloc.c:195) 
==4601== by 0x4079BB2: my_once_alloc (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x407A408: ??? (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x407AED1: ??? (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x407B112: get_charset_by_csname (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x409D55B: mysql_init_character_set (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x409F5A1: mysql_real_connect (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x80485E0: main (mysql_mem_test.c:12) 
==4601== 
==4601== 28,616 bytes in 7 blocks are possibly lost in loss record 5 of 5 
==4601== at 0x4024C1C: malloc (vg_replace_malloc.c:195) 
==4601== by 0x4079BB2: my_once_alloc (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x407A3E9: ??? (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x407AED1: ??? (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x407B112: get_charset_by_csname (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x409D55B: mysql_init_character_set (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x409F5A1: mysql_real_connect (in /usr/lib/libmysqlclient.so.16.0.0) 
==4601== by 0x80485E0: main (mysql_mem_test.c:12) 
==4601== 
==4601== LEAK SUMMARY: 
==4601== definitely lost: 0 bytes in 0 blocks 
==4601== indirectly lost: 0 bytes in 0 blocks 
==4601==  possibly lost: 53,144 bytes in 13 blocks 
==4601== still reachable: 8,192 bytes in 3 blocks 
==4601==   suppressed: 0 bytes in 0 blocks 
==4601== Reachable blocks (those to which a pointer was found) are not shown. 
==4601== To see them, rerun with: --leak-check=full --show-reachable=yes 
==4601== 
==4601== For counts of detected and suppressed errors, rerun with: -v 
==4601== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 55 from 38) 

उत्तर

16

mysql_close मदद के बाद mysql_library_end(); जोड़ने करता है?

अद्यतन: स्थापित वालग्रिंड और कोशिश की और वास्तव में यह करता है। mysql_init() निहित रूप से mysql_library_init() करता है, लेकिन mysql_close() समान रूप से mysql_library_end() नहीं करता है, जो दस्तावेज़ीकरण का तात्पर्य है लेकिन सीधे बाहर नहीं आता है और कहता है।

+0

बहुत बहुत धन्यवाद, उस समारोह के बारे में कभी नहीं सुना। एक बार फिर धन्यवाद! – Kewley

संबंधित मुद्दे