non valide application de la "sizeof" à incomplète liste type struct C
Je suis en train de mettre en œuvre un algorithme de remplacement qui traite avec des défauts de page. Donc, je suis en train de créer une liste chaînée circulaire à l'aide de malloc et im obtenir l'erreur suivante: "invalid application de sizeof' to incomplete type
pageInMemory'.voici le code:
typedef struct {
int use;
int reference;
int free;
struct pageInMemory* next;
} pageInMemory;
int main()
{
int i;
struct pageInMemory* start, *nn, *temp, *hand;
start = NULL;
for(i=0; i< pNum; i++)
{
nn = (struct pageInMemory *)malloc(sizeof(struct pageInMemory));
nn->use = 0;
nn->free = 1;
if(start==NULL)
{
nn->next = nn;
start =nn;
}
else
{ //sfhsdifhsdifj sdijfjsd
temp = start;
while(temp->next != start)
{
temp = temp->next;
}
temp->next = nn;
nn->next = start;
start = nn;
}
}
hand = start;
temp = start;
while(temp->next != start->next)
{
printf("%d\n", temp->use); //hi
}
return 0;//bye
}
donc ne suis-je pas censé utiliser malloc de cette façon ?
- Lorsque vous faites un typedef, je suggère cette syntaxe pour vous : typedef struct foo { ... } foo; Il est plus clair.
InformationsquelleAutor joseph | 2013-06-20
Vous devez vous connecter pour publier un commentaire.
changer votre struct définition
pour obtenir votre code de travail.
Et juste pour votre info ne pas transtypage de void* en provenance de malloc.
pageInMemory
est elle-même définie comme un type. Ainsi, au lieu de cela,L'utiliser,
Il doit être soit:
ou
Une troisième variante serait:
Pour cette 3ème option, vous pouvez utiliser:
ou
Cette dernière variante que je ressens est très irritant, il n'y a qu'un seul nom pour deux différents choses:
struct pageInMemory
pageInMemory
Je recommande de ne pas utiliser cette 3ème option, mais la deuxième.
typedef struct pim { ...struct pim* next; } pageInMemory.
Et puis partout ailleurs dans le code, utilisezpageInMemory
et prétendre que pas une telle chose commestruct pim
existe. Puis le type se comporte de manière uniforme à tous les autres types dans la langue. Par exemple, vous écriveznode.next = malloc(sizeof(pageInMemory));
et il fonctionne très bien.