Orjanp Skrevet 22. mars 2004 Skrevet 22. mars 2004 (endret) Noen som kan si hva som er feil i denne kodesnutten, laget i C. #include<stdlib.h> #include<stdio.h> struct list_el { int val; struct list_el * next; }; typedef struct list_el item; void list(item *c, item *h, int i) { c = (item *)malloc(sizeof(item)); c->val = i; c->next = h; h = c; } void main() { item * curr, * head; int i; head = NULL; for(i=1;i<=10;i++) { list(&curr, &head, i); } curr = head; while(curr) { printf("%d\n", curr->val); curr = curr->next; } } Får følgende feilmelding. linked.c: In function `main': linked.c:26: warning: passing arg 1 of `list' from incompatible pointer type linked.c:26: warning: passing arg 2 of `list' from incompatible pointer type linked.c:19: warning: return type of `main' is not `int' Endret 23. mars 2004 av Orjanp
kjetil7 Skrevet 22. mars 2004 Skrevet 22. mars 2004 Kommer av at du sender inn en peker til peker (item**) til list() funksjonen. Men list() funksjonen din tar kun pekere til item (item*). Du må modifisere list() funksjonen din til å motta item** pekere. Eksempel: void list(item **c, item **h, int i) { *c = (item *)malloc(sizeof(item)); (*c)->val = i; (*c)->next = *h; *h = *c; } Den siste warningen fjerner du ved å bytte ut "void main()" med "int main()" (main skal returnere en int ifølge standarden)
A_N_K Skrevet 22. mars 2004 Skrevet 22. mars 2004 Se på parameterne til funksjon list; den tar imot to pekere og en int, du gir den ikke pekere, men pekere til pekere (dvs. adressen av pekere).
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå