Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

linked list in c

Diskussion: linked list in c im Forum Code Kitchen, in der Kategorie Software Home; Anzeige hallo C Freunde! ich schon wieder Ich habe da mal ein paar fragen zur linked list... Habe mir nun ...

Antwort
Alt 14.11.11, 15:32   #1 (permalink)
 
Registriert seit: 23.08.11
Old_Pirate Leistung: Facit NTK
Likes: 0
Standard linked list in c

Anzeige

hallo C Freunde!

ich schon wieder

Ich habe da mal ein paar fragen zur linked list...

Habe mir nun einige Beispiele Angeschaut zum Beispiel :

C-Programmierung: Verkettete Listen
http://perlgeek.de/de/artikel/einfach-verkettete-listen

und denke auch das ich diese gut verstanden habe.

Allerdings arbeiten diese Beispiele immer nur mit einem Èlment ich habe aber eine Liste an sich die ein letztes und erstes Element besitzt und ein Element das sieht so aus :

Code:
struct element
{
    char d[20];
    int val;
    struct element* next;

};


struct list
{
    struct element* first;
    struct element* last;
};
So weit so gut die Liste initialisiere ich nun mit einer init Funktion
Code:
void init(struct list *list)
{
    list->first = NULL;
    list->last = NULL;
}
hier wird alles auf NULL gesetzt da die liste im Moment ja noch leer ist.
Als nächstes versuche ich ein Element einzufügen :

Code:
void insert(struct list *list, int val, char* dat)
{
    struct element *newelement;
    struct list *list_itr = list;

    newelement = malloc(sizeof(newelement));
    newelement ->val = val;
    
    if(list_itr->first == NULL)
    {
        list_itr->first = newelement;
    }else
    {
        list_itr->last = newelement;
    }
   
}
Hier erstelle ich einfach ein neues Element und überprüfe ob an List->first schon ein Element steht falls nein weiß ich das die Liste leer ist und setze nun an betreffende Stelle mein neues Element. falls die liste nicht Lerr ist eben an letzte Stelle.

genau hier liegt anscheinend das Problem das Program spuckt mir bei ausführung immer segmentation fault entgegen. Was ja soviel bedeutet wie das er versucht auf einen ungültigen Speicherbereich zuzugreifen bzw auf etwas das nicht vorhanden ist und ich vermute Stark das meine If abfrage damit gemeint ist. Also ist die Frage wie greife ich auf das Element bzw das nicht vorhandene Element bei List->first zu ?

Als nächstes komme ich auch nicht so ganz mit der Iteration zu recht habe dazu folgende Funktion geschrieben:

Code:
void printlist(struct list *list)
{
    struct list *l = list;
    l = list;
    
    if(l->first !=NULL)
    {
        while(l->first->next->next != NULL)
        {
            l=l->first->next->next;
            printf("%d\n",l->val);
        }
    }

}
Vermute aber das das auch Falsch ist kann es leider nicht prüfen da ich so weit eben gar nicht komm.

Wäre nett wenn mir jemand etwas auf die Sprünge helfen könnte.

Viele Grüße und Danke im Vorraus
Old_Pirate ist offline   Mit Zitat antworten
Alt 14.11.11, 16:23   #2 (permalink)
Senior Member
 
Benutzerbild von lookshe
 
Registriert seit: 10.03.07
lookshe Leistung: 8086
Likes: 19
Standard

Kannst du bitte die Codeabschnitte posten, die zu deinem Aufruf für insert führen?
Ich habe die Vermutung, dass du evtl. list falsch übergibst. Am besten alles von der Deklaration der Variablen bis zum Aufruf von insert.

/Edith meint noch, dass du den Fehler durch debuggen oder Debug-Ausgaben genauer einschränken solltest, also ob es wirklich die if-Abfrage ist oder doch einer der Blöcke danach.

Geändert von lookshe (14.11.11 um 16:46 Uhr)
lookshe ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 14.11.11, 17:25   #3 (permalink)
Themenstarter
 
Registriert seit: 23.08.11
Old_Pirate Leistung: Facit NTK
Likes: 0
Standard

Hallo Lookshe!

also hier mal meine main :

Code:
int main(void)
{
    
    struct list *ll;
    
    char dat[]={"1.6.2011"};

    init(ll);
    
    insert(ll, 3,dat);

    //printlist(ll);

    return 0;

}
Das ist doch was du wolltest oder ? printlist ist übrignes auskommentiert weil mir der Compiler sagt L hat kein member namens val gemeint ist die zeile :
Code:
printf("%d",l->val);
Also muss ich schon was mit den Zeigern falsch machen.

PS: Da ich nur über Gedit Programmiere habe ich keine Debug Funktion betreibe also das gute alte printf debuging naja alles wird ausgeben bis zu dem IF block in insert dann brichts ab es wird auch nichts ausgegeben was im IF block steht.
Old_Pirate ist offline   Mit Zitat antworten
Alt 14.11.11, 18:51   #4 (permalink)
 
Registriert seit: 09.12.09
Thunder11 Leistung: Z3
Likes: 0
Standard

Was mir nur Mal so auffällt ist, dass deine Liste keinen Speicherbereich bekommt. "struct list *ll;" -> Der Zeiger zeigt auf einen undefinierten Speicherbereich und in init() befüllst du den auch noch mit ((long long) 0), ergo schreibst du _irgendwohin_.
Also erst Mal die Liste initialisieren: "struct list *ll=malloc(sizeof(struct list));" sollte es tun.

In deiner insert-Funktion ähnliches:
Code:
    struct element *newelement;
    newelement = malloc(sizeof(newelement));
Das Problem: newelement ist 4 Byte lang, d.h. du forderst mit malloc nur 4 Byte an, verwendest aber 28. Also hier auch "newelement = malloc(sizeof(struct element));"

Den Rest habe ich nur überflogen, an deiner insert-Funktion solltest du vielleicht noch eine Änderung machen, wenn es ein first-Element gibt, wird das last-Element überschrieben - ich nehme aber an, das hast du runtergekürzt oder noch nicht erweitert, um den Fehler einzugrenzen.

mfg Thunder
__________________
B4 09 BA 08 01 CD 21 C3 48 61 6C 6C 6F 20 57 65 6C 74 21 24
Thunder11 ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » linked list in c
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
CVE Exploit Kit list rat (In)security allgemein 1 30.06.10 10:37
C++ list.remove FTC Code Kitchen 4 09.11.07 16:22
Apt-get sources.list zerschossen f100d Linux/UNIX 2 25.10.07 16:59
Bug-List? Serow (In)security allgemein 8 17.11.06 14:29
linked list frage (aus /usr/include/linux/list.h) alpha Code Kitchen 2 12.09.05 17:40


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61