kjey Skrevet 18. juni 2008 Del Skrevet 18. juni 2008 (endret) Hei. Driver å lager en liste-implementasjon i C, og sliter litt med noen pekere. Er egentlig ikke noe mer å fortelle, bare vise dere koden: main.c #include <stdio.h> #include "datastruct.h" LINKED_LIST *list; int main(void) { int i = 23, j = 2424, n = -12; linked_list_addLast(&i, list); return 0; } datastruct.h /* Structures and functions for linked lists */ typedef struct linked_list { struct list_node *head; struct list_node *tail; int size; } LINKED_LIST; typedef struct list_node { struct list_node *next; void *data; } LL_NODE; void linked_list_addLast(void *data, LINKED_LIST *list); linked_list.c #include <stdio.h> #include "datastruct.h" void linked_list_addLast(void *data, LINKED_LIST *list) { LL_NODE *node; node->data = data; if(list->size == 0) { list->head = node; list->tail = node; list->size++; } else { list->tail->next = node; list->tail = node; list->size++; } } Er veldig fersk i C, så ikke mobb hvis feilen er dum På forhånd takk! Endret 18. juni 2008 av kjey Lenke til kommentar
Giddion Skrevet 18. juni 2008 Del Skrevet 18. juni 2008 Er veldig fersk i C, så ikke mobb hvis feilen er dum På forhånd takk! Feilen er ikke dum, segmentation fault er vel den mest vanlige feil man kan få. Feilen kommer av at du prøver og lese/skrive til minne du ikke "eier". Hvor får du feilen? Lenke til kommentar
GeirGrusom Skrevet 18. juni 2008 Del Skrevet 18. juni 2008 Grunnen er at du ikke allokerer et minneområde til node i linked_list_addLast bruk malloc funksjonen til dette. node = malloc(sizeof(LL_NODE)); Lenke til kommentar
kjey Skrevet 18. juni 2008 Forfatter Del Skrevet 18. juni 2008 (endret) Hvorfor må jeg allokere minne til en node? Er det fordi det er en datastruktur og at det er slik man må initialiserer den? Og hva med linked_list i main.c? Må man ikke allokere til den også? Endret 18. juni 2008 av kjey Lenke til kommentar
Psy Skrevet 18. juni 2008 Del Skrevet 18. juni 2008 Ja, du må også allokere i main funksjonen. Grunnen til at du må allokere er fordi noden er en peker (du må allokere et område i minnet den kan peke på). Lenke til kommentar
kjey Skrevet 18. juni 2008 Forfatter Del Skrevet 18. juni 2008 (endret) Ja sant det! Fant også ut at allokeringen måtte skje inne i funksjonene... rart Men uansett får jeg opp noen warnings, det virker som programmet fungerer, men: gcc main.c linked_list.c -o Run main.c: In function ‘main’: main.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’ linked_list.c: In function ‘linked_list_addLast’: linked_list.c:6: warning: incompatible implicit declaration of built-in function ‘malloc’ Er disse noe å bry seg om? Endret 18. juni 2008 av kjey Lenke til kommentar
jurg Skrevet 18. juni 2008 Del Skrevet 18. juni 2008 Ja sant det! Fant også ut at allokeringen måtte skje inne i funksjonene... rart Men uansett får jeg opp noen warnings, det virker som programmet fungerer, men: gcc main.c linked_list.c -o Run main.c: In function ‘main’: main.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’ linked_list.c: In function ‘linked_list_addLast’: linked_list.c:6: warning: incompatible implicit declaration of built-in function ‘malloc’ Er disse noe å bry seg om? Hiv inn en #include <stdlib.h> du Lenke til kommentar
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å