Я получаю эту ошибку, когда пытаюсь освободить созданный мной массив кортежей.
Вот где возникает ошибка:
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]);
Я никогда не получал ошибку со свободным ранее, за исключением случаев, когда я пытался освободить одно и то же дважды, поэтому я не уверен, что с этим делать. Я гуглил вокруг, но я не мог найти много. Как мне изменить свой код, чтобы он работал бесплатно?