malloc beim MinGW
-
Hallo alle zusammen.
Ich habe folgendes Problem:Ich habe folgende Struktur:
typedef struct test { char *name; struct test *prev, *next; }test;
ich hole mir mit...
test *testvar; testvar = (test*) malloc (sizeof(test));
....speicher.
für den Charpointer hole ich mir auch speicher.
nun hänge ich einige elemente an meine liste heran.
Alles klappt wunderbar, bis ich dann bei der Add funktion plötzlich genau die gleiche Speicheradresse von malloc bekomme, wie schon ein paar Listeneinträge vorher.Kann es sein, dass die malloc funktion nicht richtig funktioniert??
gruß Patrick
-
Eigentlich nicht. Lass mal deine add-Funktion sehen, meine Glaskugel ist mir leider gestern beim Putzen runtergefallen...
-
Typen* addList(char* type_name, Typen *alt) { alt = goTop(alt); struct Typen *temp; temp = (Typen*) malloc (sizeof(*temp)); fprintf(stderr,"4. temp= %x\n",temp); fflush(stderr); temp -> name = (char*) malloc (strlen(type_name)+1); fprintf(stderr,"5. temp->name= %x temp->next= %x temp = %x\n",temp->name,temp->next,temp); fflush(stderr); strcpy(temp -> name,type_name); temp -> next = NULL; fprintf(stderr,"7. temp->next= %x temp = %x\n",temp->next,temp); fflush(stderr); temp -> prev = alt; fprintf(stderr,"8.temp->next= %x temp = %x\n",temp->next,temp); fflush(stderr); alt -> next = temp; fprintf(stderr,"9.temp->next= %x temp = %x\n",temp->next,temp); fflush(stderr); return(temp); }
-
Steven schrieb:
meine Glaskugel ist mir leider gestern beim Putzen runtergefallen...
Reparatur?
@paddy82
Dein Ablauf scheint korrekt zu sein. Du solltest aber die stderr Ausgaben erst machen, nachdem die Argumente auch initialisiert wurden. ZB gibst du bei der ersten Ausgabe temp->next an, obwohl das noch gar keine gültige Adresse hat. Und dass malloc nicht richtig funktioniert ist unwahrscheinlich.
-
Vielleicht läuft irgendwo ein Pointer Amok? Solche verrückten Fehler haben meistens etwas damit zu tun, dass du irgendwo wild im Speicher rumschreibst und so vielleicht interne Daten der malloc-Funktion zerstörst.