D4rkAng3l
29-04-2005, 17:35
Ho scritto questo semplice programmino che alloca dinamicamente un array con calloc, poi lo riempie e infine dovrebbe liberare la memoria precedentemente allocata con free ma quest'ultimo punto mi crea qualche problema....come mai non mi libera la memoria?
#include <stdlib.h>
#include <stdio.h>
/* Non riceve alcun parametro ed emette un puntatore a float */
int * get_mem(void);
int main(void){
int i;
int *puntatore; // Puntatore al primo valore float dell'array allocato
/* Alloca la memoria dinamicamente e metti il valore del puntatore uscente
dalla funzione get_mem nellaa variabile puntatore */
puntatore = get_mem();
printf("\nValore contenuto in puntatore: %p\n\n\n\n", puntatore);
for(i=0; i<100; i++){
*(puntatore + i) = i; // Inizializza l'array con il valore di i
}
/* Visualizza l'array allocato dinamicamente */
for(i=0; i<100; i++){
printf("Indirizzo: %p Valore: %d\n", &puntatore[i],puntatore[i]);
}
printf("\n\n\n\n\nValore contenuto in puntatore: %p\n\n\n\n", puntatore);
/* Libera la memoria precendetemente allocata */
for(i=0; i<100; i++)
free(puntatore[i]);
printf("%d", puntatore[2]);
system("PAUSE");
return 0;
}
/* La funzione get_mem non riceve alcun parametro in ingresso e restituisce un
puntatore al primo valore di tipo float dell'array di 100 elementi allocato
dinamicamente */
int *get_mem(void){
int *p; // Puntatore al primo elemento di tipo float dell'array
/* Alloca memoria per un array di 100 elementi di tipo float */
p = calloc(100, sizeof(int));
if(!p){ // Se calloc restituisce un puntatore NULL
printf("Errore di allocazione della memoria\n");
exit(1);
}
return p;
}
#include <stdlib.h>
#include <stdio.h>
/* Non riceve alcun parametro ed emette un puntatore a float */
int * get_mem(void);
int main(void){
int i;
int *puntatore; // Puntatore al primo valore float dell'array allocato
/* Alloca la memoria dinamicamente e metti il valore del puntatore uscente
dalla funzione get_mem nellaa variabile puntatore */
puntatore = get_mem();
printf("\nValore contenuto in puntatore: %p\n\n\n\n", puntatore);
for(i=0; i<100; i++){
*(puntatore + i) = i; // Inizializza l'array con il valore di i
}
/* Visualizza l'array allocato dinamicamente */
for(i=0; i<100; i++){
printf("Indirizzo: %p Valore: %d\n", &puntatore[i],puntatore[i]);
}
printf("\n\n\n\n\nValore contenuto in puntatore: %p\n\n\n\n", puntatore);
/* Libera la memoria precendetemente allocata */
for(i=0; i<100; i++)
free(puntatore[i]);
printf("%d", puntatore[2]);
system("PAUSE");
return 0;
}
/* La funzione get_mem non riceve alcun parametro in ingresso e restituisce un
puntatore al primo valore di tipo float dell'array di 100 elementi allocato
dinamicamente */
int *get_mem(void){
int *p; // Puntatore al primo elemento di tipo float dell'array
/* Alloca memoria per un array di 100 elementi di tipo float */
p = calloc(100, sizeof(int));
if(!p){ // Se calloc restituisce un puntatore NULL
printf("Errore di allocazione della memoria\n");
exit(1);
}
return p;
}