2014-05-16 85 views
0

這裏是我的主:C - 如何釋放在其他函數中分配的內存?

int main() 
{ 
    int i; 
    int *a = readData(N); 
    int *f = frequency(a, N, MAX); 
    int c = 0; 

    printf("%9s %9s\n", "Number", "Frequency"); 
    for(i = 0; i <= MAX; i ++) 
    { 
     c += f[i]; 
     printf("%9d %9d\n", i, f[i]); 
    } 

    printf("total frequency for all words: %d\n", c); 
    free(f); 
    free(a); 
    printf("All memory freed!\n"); 

    return(0); 
} 

,這裏是第一支撐功能

int * readData(int size) 
{ 
    int i, *array = malloc(N*sizeof(int)); 
    for(i =0; i<N;i++) 
     scanf("%d", &array[i]); 

    return array; 
} 

和第二支撐作用

int * frequency(int *input, int size, int max) 
{ 
    int i, x; 
    int *farray = malloc(max+1*sizeof(int));  
    for(i = 0; i<=max;i++) 
     farray[i]=0; 

    for(i = 0; i<1099; i++) 
    { 
     x = input[i]; 
     farray[x]++; 
    } 

    return farray; 
} 

一切的偉大工程!當我通過valgrind運行它時,它告訴我所有的記憶都被釋放了。但是,當我正常運行程序時,當我釋放分配的內存時,它在最後以一個核心轉儲崩潰。爲什麼?提前致謝!我是C新手。

+0

什麼'N'?什麼是MAX?硬編碼限制'i <1099'的循環看起來很可疑,「數組」輸入是否包含'1099'條目?如果你不使用它,你爲什麼要傳入'size'參數? –

+0

硬編碼條目用於調試,但感謝您指出這一點,因爲我打算將其改回「大小」。 – user3643422

回答

4

的確,所有內存都被釋放,但是分配的大小並不正確。

int *farray = malloc(max+1*sizeof(int)); 

這裏,大小爲max加一sizeof(int)),它應該是:

int *farray = malloc((max+1)*sizeof(int));