Ошибка «указатель на неполный тип» в c - PullRequest
2 голосов
/ 22 сентября 2011

У меня есть две структуры, подобные этой

Отредактированный код:

typedef struct 
{
   int threadId;
   void *stack;
}gtthread_t;

typedef struct
{
   gtthread_t *th;
   struct list *next;
}list;

В моем коде я использовал такие структуры:

Здесь также происходит ошибка:

free(temp->next->th->stack);

Что я здесь не так делаю?У меня есть узел в temp-> next (это не NULL).

Любая помощь будет оценена

Ответы [ 3 ]

3 голосов
/ 22 сентября 2011
typedef struct
{
   gtthread_t *th;
   list *next;
}list;

Когда анализатор находится в строке 3, он понятия не имеет, что означает list. Попробуйте

typedef struct list
{
   gtthread_t *th;
   struct list *next;
}list;

вместо.

1 голос
/ 22 сентября 2011

Просто переписать список так:

struct list
{
   gtthread_t *th;
   struct list *next;
};
typedef struct list list;
0 голосов
/ 22 сентября 2011

Эту структуру также необходимо создать: temp->next->th->threadId

т.е.

temp = (list *)malloc(sizeof(list));
temp->next = (list *)malloc(sizeof(list));
temp->next->th = (gtthread_t *)malloc(sizeof(gtthread_t));
temp->next->th->threadId = <some value>
temp->next->th->stack = <some value>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...