Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [c] funzione free

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [c] funzione free

    La funzione free non mi pare liberi la memoria.
    A me, questo programma mi stampa il valore allocato in precedenza.. :master:

    codice:
    #include <stdio.h>
    
    int main()
    {
    
      int *array;
      array = (int *) malloc(5*sizeof(int));
      *array=1;
      *(array+1)=2;
    
      free(array);
      printf("%d", *(array+1));
    
    
    
      getch();
      return 0;
    }

  2. #2
    se tu fai free(array); liberi la memoria puntata da array... ovvero la prima cella dell'array.. ma evidentemente la variabile array continua a puntare a quella memoria.. quindi se fai array+1 ti punterà al corretto elemento.. ma questo non vuol dire che la memoria del primo elemento sia stata liberata..

  3. #3
    Originariamente inviato da }gu|do[z]{®©
    se tu fai free(array); liberi la memoria puntata da array... ovvero la prima cella dell'array.. ma evidentemente la variabile array continua a puntare a quella memoria.. quindi se fai array+1 ti punterà al corretto elemento.. ma questo non vuol dire che la memoria del primo elemento sia stata liberata..
    Non penso funzioni così.
    free() dovrebbe liberare la memoria allocata con malloc, e quindi tutto il blocco del array.

    PER Lucked

    [list=1][*] Liberare la memoria non significa cancellare i suoi valori, significa dire al compilatore che lo spazio dove sono quei valori è libero per essere sovrascritto.[*] Ti consiglio di usare la funzione calloc() per quel genere di allocazione.[/list=1]

    Cveo :quipy:

  4. #4
    sì hai ragione.. l'array è stato allocato tutto assieme.. scusa.. io free l'ho usato sopratutto cone le liste e lì chiaramente alloco elemento per elemeento

  5. #5
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Credo che l'importante sia che la memoria sia nuovamente "disponibile" per essere utilizzata per altre variabili o per essere allocata nuovamente, da un altro processo magari... No ?!?

  6. #6
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Originariamente inviato da Michele Facchin
    - Liberare la memoria non significa cancellare i suoi valori, significa dire al compilatore che lo spazio dove sono quei valori è libero per essere sovrascritto.
    significa dire , durante l'esecuzione, al sistema che quella parte di memoria può essere riutilizzata. e lo stesso vale per i file!

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Sono daccordo con quanto avete detto...

    thanks! :metallica

  8. #8
    Originariamente inviato da iguana13
    significa dire , durante l'esecuzione, al sistema che quella parte di memoria può essere riutilizzata. e lo stesso vale per i file!
    Si vabbè l'idea era quella :tongue:

  9. #9
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Allora, piu' o meno, ci avevo preso pure io... :gren:

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.