Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] allocazione memoria esterno - free

    Ciao a tutti,
    il mio C è un po arrugginito, mi sono troppo abituato bene con Java :-)

    Volevo chiedervi una delucidazione se è necessario esplicitamente fare il free oppure no di una variabile, nel caso sotto descritto:

    codice:
     ....
    for (.....) {
       char *myString;
       call_extern_function(myString);
    }
    ...
    In questo snippet, la memoria di myString viene allocata (malloc, non in mio potere) dalla funzione esterna.

    E' corretto che alla fine del ciclo "myString" esce fuori scope, quindi la memoria viene liberata, oppure il fatto che il malloc avvie altrove, devo preoccuparmi di fare un "free" prima di uscire dal ciclo?

    Grazie
    Alfredo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se la free non la fa la stessa funzione, la devi fare tu.

    Il fatto che il puntatore esca dallo scope non vuol dire che la memoria puntata venga liberata, anzi, è anche peggio dato che dopo non avrai più il puntatore alla memoria e questa diventerà irraggiungibile (con conseguente grave memory leak).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Grazie per il chiarimento.

    Alfredo

  4. #4
    Verifica però se la libreria non fornisce una sua versione della free: altrimenti, se il tuo eseguibile e la libreria usano due copie diverse della CRT, vai a cercare di liberare nel tuo heap memoria allocata in un altro heap.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.