Несовместимый тип для аргумента 1 свободного - PullRequest
0 голосов
/ 26 апреля 2018

Я получаю эту ошибку, когда пытаюсь освободить созданный мной массив кортежей.

Вот где возникает ошибка:

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;

Обратите внимание, что я почти уверен, что должен освободить слово, прежде чем освободить сам кортеж, так как я выделяю место для каждого слова:

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]);

Я никогда не получал ошибку со свободным ранее, за исключением случаев, когда я пытался освободить одно и то же дважды, поэтому я не уверен, что с этим делать. Я гуглил вокруг, но я не мог найти много. Как мне изменить свой код, чтобы он работал бесплатно?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Поскольку вы выделили весь массив freq_words за один вызов malloc:

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

Вы должны освободить весь массив сразу:

free(freq_words);
0 голосов
/ 26 апреля 2018

выделение: Tuple * freq_words = (Tuple *) malloc (sizeof (Tuple) * num);

выделение средств: Свободный (freq_words);

...