malloc() in Schleife
-
Hallo Leute!
Jetzt sitze ich hier schon die halbe Nacht und weiß einfach nicht wo es hakt. (also wo schon, aber nicht warum!)
Vielleicht hat jemand von euch mal einen Tip!? Ich versuchs erstmal mit Worten zu skizzieren..Es soll eine verkettete Liste generiert werden. (mit Schleife)
Die Schleife ruft die Insert Funktion auf, in der malloc() steht.Wenn mit printf die Anfangsadressen und Artikelnummern aus der InsertFunktion heraus ausgegeben werden sieht es alles korrekt aus.
Wenn jetzt aber die gesamte Liste ausgegeben werden soll (mit printFunc) ala:
while(ptr != NULL)
{
print mystruct;
ptr = ptr->next;
}bekomme ich lediglich die Adresse des vom ersten Element (also meinem first Zeiger)
und als nächstes den NULL Zeiger...ergo der geht die Liste gar nicht durch.
Bin auch gar nicht mehr so sicher ob die überhaupt existiert..Was mache ich falsch? Hat jemand eine Idee?
Danke für Anregungen!!PS vielleicht nützt der Code
#include <stdio.h> #include <stdlib.h> struct lager { long artikelnummer; char bezeichnung[100]; struct lager *next; }; struct lager *first = NULL; int i = 1; /*************************************************************** * createfirst Func * *****************************************************************/ void createfirst(void) { if(first == NULL) { first = (struct lager *)malloc(sizeof(struct lager)); if(first == NULL) { printf("Speichermangel\n"); exit(0); } else { first->artikelnummer = 0; strcpy(first->bezeichnung,"apfel"); first->next = NULL; printf("Artikel %s aufgenommen Artikelnummer %ld Adresse ist %p next zeigt auf %p\n",first->bezeichnung, first->artikelnummer, first, first->next); } } } /*************************************************************** * insert Func * *****************************************************************/ int insert(void) { struct lager *ptr; ptr = first; while(ptr != NULL) ptr = ptr->next; ptr = (struct lager *)malloc(sizeof(struct lager)); ptr->artikelnummer = i; strcpy(ptr->bezeichnung, "birnen"); ptr->next = NULL; printf("Artikel %s aufgenommen Artikelnummer %ld Adresse ist %p\n",ptr->bezeichnung, ptr->artikelnummer, ptr); i++; } /*************************************************************** * printtest Func * *****************************************************************/ void printtest(void) { struct lager *lager_ptr; lager_ptr = first; printf("in printfunc:\n"); printf("lager_ptr %p muesste auf das erste element zeigen\n", lager_ptr); printf("macht er auch\n\n"); while(lager_ptr != NULL) { printf("lager_ptr %p muesste auf das letzte Element zeigen\n\n", lager_ptr); printf("TUT ER NICHT ( ( ( ((HILFE)) ) ) )\n"); lager_ptr = lager_ptr->next; printf("lager_ptr %p muesste NULL sein\n\n", lager_ptr); } } int main(int argc, char *argv[]) { createfirst(); while(i<4) { insert(); } system("PAUSE"); printtest(); system("PAUSE"); return 0; }
-
Du mußt die neu angelegten Listenelemente natürlich auch in deine Liste einhängen:
void insert() { struct lager *ptr; ptr = first; while(ptr->next != NULL) ptr = ptr->next; ptr->next = (struct lager *)malloc(sizeof(struct lager)); ptr=ptr->next ... }
(übrigens hat das nichts im C++ Board zu suchen - das ist finsterster C-Code)
-
Du machst einen Überlegungsfehler in der Methode insert();
Du erstellst zwar in der Zeile 51 ein neues struct aber schlussendlich vergisst du es in das Grundelement first abzuspeichern.
ups war wohl einwenig zu spät
-
(sollte man nach Ansi C schieben...)
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo Ihr Lieben,
super, das hätte ohne eure Hinweise glatt noch eine Ewigkeit gedauert.
DANKE!!!
Grüße aus Hamburg