Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19

Discussione: [C] Memory Leak

  1. #1

    [C] Memory Leak

    Ragazzi vi prego aiutatemi
    se testate l'aplicazione si può notare che la memoria allocata dalla stessa aumenta di 4k all'incirca per ogni 100 insert nel db.
    Non riesco a capire il perkè.
    Purtroppo devo creare un'applicazione che faccia insert per un tempo ipoteticamente infinito ma se la memoria occupata aumenta sempre ho dei seri problemi
    ecco il codice dell'applicazione:
    codice:
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <process.h>
    #include "sqlite3.h"
    
    int main()
    {
    	sqlite3 *dbDati;
    
    	int checkSQL,i;
    	char * insert;
    	char *zErrMsg=0;
    
    	checkSQL=sqlite3_open("dbDati.db",&dbDati);
    
    	if(checkSQL!=0)
    		{
    		printf("ERROR 01");
    		return -1;
    		}
    
    	for(i=0;i<100000;i++)
    	{
    
    	insert=sqlite3_mprintf("INSERT INTO TAB VALUES(%d,%d)",i,i);
    
    	printf("INSERT=%s\n",insert);
    
    	checkSQL=sqlite3_exec((sqlite3 *) dbDati,insert,0,0,&zErrMsg);
    
    	if(checkSQL!=0)
    		{
    		fprintf(stderr, "SQL error: %s\n", zErrMsg);
    
    		printf("ERROR");
    
    		sqlite3_free(zErrMsg);
    
    		return -1;
    		}
    
    	sqlite3_free(insert);
    	sqlite3_free(zErrMsg);
    
    	Sleep(500);
    
    	}
    
    	sqlite3_close((sqlite3 *) dbDati);
    
    	return 0;
    
    }
    La cosa strana è che se iconizzo la finestra dell'applicazione per poi ripristinarla la memoria scende repentinamente.
    Vi prego aiutatemi non so + cosa fare

    Grazie mille

    P.S.
    come potrei allegare lo zip del progetto???

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Supponendo che la libreria non generi leak interni, prova a commentare la printf(INSERT etc).
    Da quanto dici, sembra più qualcosa legato alla consolle di windows.

  3. #3
    Purtroppo il problema permane

  4. #4
    nessuno sa essermi di aiuto?

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    visto così il codice non può fare danni.. quindi il problema a mio parere sta nelle librerie

  6. #6
    Non ho mai usato le sqlite3, ma osservo che:

    se sqlite3_exec alloca memoria per l'eventuale messaggio d'errore, allora tu liberi lo spazio allocato solo in caso d'errore.
    se non lo alloca, allora in caso d'errore la sqlite3_exec scrive in zona di memoria che tu non hai allocato.

  7. #7
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    e se tu liberassi cmq la memoria? (come se avesse fatto errore).. Spara eccezioni?

  8. #8
    ho provato ma il problema permane.... purtroppo

  9. #9
    ragazzi ho uplodato il progetto qui
    http://www.mediafire.com/?7jxcve1m3kx
    Cerco sempre qualcuno ch emi possa essere di aiuto

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ho fatto delle prove e ho visto che la libreria alloca e non rilascia una certa quantita' di "private bytes" ...

    Dovresti provare ad usare una versione piu' aggiornata, mi sembra che ci sia la 3.5.6

    http://www.sqlite.org/releaselog/3_5_6.html

    Forse hanno risolto, oppure segnala il problema ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.