PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL Speicher freigeben in C ?



mofaklaus
29-10-2006, 12:51
Hallo Gemeinde,

ich habe ein Programm geschrieben, welches Parameter aus eine MySQL Datenbank auslesen soll. Das auslesen wird einmal pro minute durchgeführt.
Dazu habe ich folgende Funktion geschrieben.



void init_read(void){

MYSQL *my;
MYSQL_RES *result;
MYSQL_ROW record;
char sql[150];

my = mysql_init(NULL);
if(my == NULL){
fprintf(stderr, "Fehler mysql_init(): %u (%s)\n", mysql_errno (my), mysql_error(my));
}
if (mysql_real_connect(my, HOST, USER, PASSWD, DBNAME, PORT, SOCKET, FLAG) == NULL){
fprintf(stderr, "Fehler mysql_real_connect(): %u (%s)\n", mysql_errno (my), mysql_error(my));
}
else {

sprintf(sql, "SELECT PARAM_Value FROM Tabelle WHERE PARAM_Name = 'Param1'");
if(mysql_real_query(my, sql, strlen(sql)) != 0) fprintf(stderr, "Fehler mysql_real_connect(): %u (%s)\n", mysql_errno (my), mysql_error(my));
result = mysql_store_result (my);
while((record = mysql_fetch_row(result))) { Param1 = atof(record[0]); }

mysql_free_result(result);
}
mysql_close (my);
}



Das funktioniert auch recht gut. Aber nach ca. 12- 16 Stunden ist mein Speicher(RAM und Swap) voll. Ich vermute also, dass ich die MySQL Instanz nicht richtig beende, oder das Object "my" nicht lösche.
Wenn ich das gesamte Programm beende, ist der Speicher wieder frei.
Aber wass habe ich falsch gemacht oder was habe ich nicht gemacht?

Danke
Mofaklaus

anda_skoa
29-10-2006, 14:45
So auf den ersten Blick und ohne die MySQL API zu kennen, würde ich raten, daß das Ergebnis der Funktion mysql_fetch_row wieder freigegeben werden muß

Ciao,
_