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)
getResults
ist die einzige Methode im gesamten Code, die mysql_store_result
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,
und alles kommt auf mysql_store_result
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.
Tags und Links memory-leaks c++ mysql