Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C++] - memory leaks

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    104

    [C++] - memory leaks

    salve,
    ho incontrato dei problemi di memory leaks (segnalati da visual studio) in un mio applicativo che sto scrivendo. A causa di questi memory leaks l'applicativo si chiude dopo tantissimo tempo perchè fa il dump degli oggetti,
    Volevo sapere se esisteva un metodo per capire il punto esatto dove avvengono le perdite di memoria o se si deve ricontrollare tutto il codice.
    Grazie, aspetto suggerimenti.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Hai letto i messaggi di Visual Studio?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    104
    grazie per la risposta,
    allora te ne posto uno (ce ne sono parecchi!!!) gli altri sono simili

    Dumping objects ->
    C:\Programmi\Microsoft Visual Studio .NET 2003\Vc7\include\crtdbg.h(689) : {8681} normal block at 0x00CE8970, 4 bytes long.
    Data: <\ > 5C CA 82 00

    quello che non riesco a capire è come fare ad individuare la riga di codice nel mio sorgente
    dove si è verificata la perdita.
    In questo caso ad esempi cliccando su "C:\Programmi..." dell'errore precedente
    mi rimanda alla definizione del metodo new del file crtdgb.h quindi sono degli errori di mancato delete.

    Gli errori sono tutti di questo tipo ma ce ne sono davvero tanti (il programma in modalità debug termina dopo qualche ora), spero d esserer stato chiaro.

    Qualche dritta per cercare di correggere le perdite?
    Quanto danno possono fare tenendo conto che nn è un applcativo server side?

  4. #4
    Non esiste un punto esatto in cui "perdi la memoria", semplicemente non deallochi (con delete o con free) tutta la memoria che hai allocato dinamicamente (con new o con malloc), cosa che invece andrebbe sempre fatta.
    Qualche dritta per cercare di correggere le perdite?
    Ricontrolla tutto il codice, assicurati che ogni oggetto che crei con new venga distrutto correttamente con delete quando non serve più.
    Quanto danno possono fare tenendo conto che nn è un applcativo server side?
    Dipende... ma se il problema è così vasto molto probabilmente la memoria del processo in cui viene eseguito il tuo programma man mano crescerà sempre di più e dopo un po' l'esecuzione diventerà molto lenta.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da Cap_1981
    allora te ne posto uno ...
    Purtroppo un solo messaggio non basta e bisogna anche controllare di pari passo il codice ...

    quello che non riesco a capire è come fare ad individuare la riga di codice nel mio sorgente
    dove si è verificata la perdita.
    Come ti e' stato detto, non c'e' "una perdita" .... tu puoi allocare memoria, deallocarla, riallocarla quando e come vuoi ... ma prima di terminare il programma, questa deve essere liberata ... se non lo fai, hai il problema ... ma il problema NON sta nelle operazioni precedenti ma nella mancata liberazione finale ...

    Qualche dritta ...
    Potresti dare un'occhiata al costruttore e al distruttore di ogni classe che utilizzi ... in genere (ma non e' detto) allochi nel costruttore e liberi nel distruttore ...

    Quanto danno possono fare tenendo conto che nn è un applcativo server side?
    Tanto danno. Correggili tutti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    104
    Non esiste un punto esatto in cui "perdi la memoria", semplicemente non deallochi (con delete o con free) tutta la memoria che hai allocato dinamicamente (con new o con malloc), cosa che invece andrebbe sempre fatta.
    ho capito,
    in pratica deve esserci esattamente un delete per ogni new.
    Il problema è che queste cose devono essere fatte in tempo altrimenti diventa molto ostico (ho fatto un errore grave in questo senso!!!).

    Non esiste nessuna possibilità di farmi dire quali delete mancato e in particolare quale oggetto (con un riferimento al tipo di oggetto o che mi permetta di capire quale è all'interno del mio sorgente) presente nell'heap del programma non ha rilasciato la memoria visto che visual studio mi riporta il contenuto dei primi byte (16 mi pare) dell'oggettto non deallocato?

    Potresti dare un'occhiata al costruttore e al distruttore di ogni classe che utilizzi ... in genere (ma non e' detto) allochi nel costruttore e liberi nel distruttore
    va bene, ma non penso sia li' il problema.

    Grazie comunque per i suggerimenti.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Se esamini bene tutti i messaggi e contemporaneamente leggi il codice, con un po' di esperienza, dovresti capire dove sono i problemi ...

    Pero' scusa, ma come hai fatto ad arrivare ad una situazione del genere? Gia' al primo errore, avresti dovuto rimediare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    104
    Se esamini bene tutti i messaggi e contemporaneamente leggi il codice, con un po' di esperienza, dovresti capire dove sono i problemi
    mi potresti fare un esempio? nei messaggi non riesco ad arrivare al sorgente

    Pero' scusa, ma come hai fatto ad arrivare ad una situazione del genere? Gia' al primo errore, avresti dovuto rimediare
    hai perfettamente ragione ma ormai il danno è fatto.

  9. #9

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da Cap_1981
    mi potresti fare un esempio? nei messaggi non riesco ad arrivare al sorgente
    No ... purtroppo non e' facile fare un esempio ...

    Se metti a disposizione il progetto, lo posso scaricare e dare un'occhiata ...
    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.