【问题标题】:C - How do I free memory that is allocated in other functions?C - 如何释放在其他函数中分配的内存?
【发布时间】: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 &lt; 1099 的循环看起来很可疑,“数组”input 会包含1099 条目吗?不使用size参数为什么还要传入?
  • 硬编码条目用于调试,但感谢您指出这一点,因为我打算将其改回“大小”。

标签: c function malloc external free


【解决方案1】:

确实所有内存都被释放了,但是你分配的大小不正确。

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

这里,大小是max加一sizeof(int)),应该是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    相关资源
    最近更新 更多