wann mysql_free_result aufgerufen werden soll (mysql_store_result, MYSQL_RES)

8

Ich habe 2 Codes (Programme)

Programm 1:

%Vor%

" Anderer Code " beinhaltet eine for-Schleife, die Funktionen aufruft, die dasselbe res_set verwenden, um Ergebnisse von mysql_store_result zu speichern. Wie gesehen, rufe ich mysql_free_result(res_set); nur einmal am Ende von main auf.

valgrind zeigt still reachable Speicherprobleme im obigen Fall (die ich ignoriert habe). Keine anderen Lecks sind vorhanden.

Programm 2:

class mysqlClientClass hat folgende private Variablen,

%Vor%

Einige der Methoden sind (relevant für mein Problem),

%Vor%

Wenn der Benutzer closeConnection nicht aufrufen kann, wird er vom Destruktor geschlossen (indem überprüft wird, ob connect auf NULL oder nein gesetzt ist)

%Vor%

getResults ist die einzige Methode im gesamten Code, die mysql_store_result

verwendet %Vor%

Wenn ich das res_set nicht am Ende der Funktion freigebe (und es nur im Destruktor / close Connection freigebe), mache ich mehrere Aufrufe an diese Funktion valgrind reports,

%Vor%

und alles kommt auf mysql_store_result

an %Vor%

Wie auf der Handbuchseite von mysql_store_result

  

mysql_store_result () liest das gesamte Ergebnis einer Abfrage auf den Client,    ordnet eine MYSQL_RES-Struktur zu und platziert das Ergebnis in diese   Struktur.

und es schlägt auch vor, dass ich nach der Verwendung free_result aufrufen sollte.

Das scheint so zu funktionieren, wie es in Programm 2 dokumentiert ist (Speicherlecks, wenn ich mysql_free_result nicht anrufe), aber warum zeigt Programm 1 dann keine Lecks? Auch in Programm 1 mache ich mehrere Aufrufe von mysql_store_result zwischen verschiedenen Funktionen, ohne jedes Mal freizugeben.

    
Suvarna Pattayil 29.05.2013, 06:12
quelle

1 Antwort

-3

Sie benötigen mysql_store_result nicht, um Daten von der Abfrage zu erhalten - verwenden Sie Rückrufe mit sqlite3_exec

%Vor%

Hatte bei diesem Ansatz nie irgendwelche Lecks.

    
Ulterior 26.06.2013 02:17
quelle

Tags und Links