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新手。
什麼'N'?什麼是MAX?硬編碼限制'i <1099'的循環看起來很可疑,「數組」輸入是否包含'1099'條目?如果你不使用它,你爲什麼要傳入'size'參數? –
硬編碼條目用於調試,但感謝您指出這一點,因爲我打算將其改回「大小」。 – user3643422