【发布时间】:2014-05-16 05:32:59
【问题描述】:
这是我的主要内容:
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的循环看起来很可疑,“数组”input会包含1099条目吗?不使用size参数为什么还要传入? -
硬编码条目用于调试,但感谢您指出这一点,因为我打算将其改回“大小”。
标签: c function malloc external free