参数1的免费类型不兼容

时间:2018-04-26 16:27:16

标签: c free

当我尝试释放我创建的元组数组时,我收到此错误。

以下是发生错误的地方:

void free_freq_words(Tuple *freq_words, int num)
{
  int i;

  for (i = 0; i < num; i++)
  {
     free(freq_words[i].word);
     free(freq_words[i]); /******* error here *********/
  }
}

我创建了这样的元组数组:

Tuple *freq_words = (Tuple *) malloc(sizeof(Tuple) * num);

以下是元组的定义方式:

typedef struct Tuple
{
   int freq;
   char *word;
} Tuple;

请注意,在我释放Tuple本身之前,我很确定我必须释放单词,因为我为每个单词分配了空格:

freq_words[num - 1].word = (char *) malloc(sizeof(char) * strlen(word) + 1);

我得到的错误是第二个免费:

fw.c: In function âfree_freq_wordsâ:
fw.c:164:7: error: incompatible type for argument 1 of âfreeâ
       free(freq_words[i]);
       ^
In file included from fw.c:3:0:
/usr/include/stdlib.h:482:13: note: expected âvoid *â but argument is of type âT
upleâ
 extern void free (void *__ptr) __THROW;

我在释放之前试图施放,但那不起作用:

fw.c: In function âfree_freq_wordsâ:
fw.c:164:7: error: cannot convert to a pointer type
   free((void *) freq_words[i]);

我以前从来没有得到过任何错误的错误,除非我试图两次释放同样的东西,所以我不知道该怎么做。我用Google搜索,但我找不到多少。我应该如何更改我的代码以免免费工作?

2 个答案:

答案 0 :(得分:5)

分配是: 元组* freq_words =(元组*)malloc(sizeof(Tuple)* num);

解除分配是: 自由(freq_words);

答案 1 :(得分:1)

因为您在一次调用malloc时分配了整个freq_words数组:

Tuple *freq_words = (Tuple *) malloc(sizeof(Tuple) * num);

您必须立即释放整个阵列:

free(freq_words);