Probleme mit malloc und structs
-
Moin,
ich schreibe grade an nem kleinen Programm und scheitere an folgendem Problem:
Hier habe ich mal nen testfall zusammengestellt:
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct MenuItem { char * Name; int Index; struct MenuItem * Next; struct MenuItem * Prev; } MenuItem; typedef struct MenuList { int NumItems; int ShadowValue; MenuItem * Items; } MenuList; int InitMenu (MenuList ** Menu) { *Menu = malloc (sizeof (MenuList)); (*Menu)->Items = NULL; return 1; } int AddMenuItem (MenuList ** Menu, char * Name) { MenuItem * ref; ref = (*Menu)->Items; if (ref == NULL) { (*Menu)->Items = malloc (sizeof (MenuItem)); (*Menu)->NumItems += 1; } else { while (ref->Next != NULL) { ref = ref->Next; } ref->Next = malloc (sizeof (MenuItem)); ref = ref->Next; (*Menu)->NumItems += 1; } ref->Name = malloc (strlen (Name)); //strcpy (ref->Name, Name); //ref->Index = (*Menu)->NumItems - 1; return 1; } int main () { MenuList * MainMenu; printf ("MENULIST TEST\n"); printf ("Initialisiere Liste...\n"); InitMenu (&MainMenu); printf ("Füge ein Element hinzu...\n"); AddMenuItem (&MainMenu, "testentry"); return 0; }In der AddMenuItem bekomme ich einen "Speicherzugriffsfehler" (zur runtime!) bei der zeile:
ref->Name = malloc (strlen (Name));was mache ich da falsch?
Danke für die Hilfe!
-
Dein zeiger "ref" ist sozusagen veraltet
MenuItem * ref; ref = (*Menu)->Items;/* hier das gleiche wie ref = NULL */ if (ref == NULL) { (*Menu)->Items = malloc (sizeof (MenuItem));/* ref ist immer noch NULL*/ (*Menu)->NumItems += 1; /* ref = (*Menu)->Items fehlt */ } else { while (ref->Next != NULL) { ref = ref->Next; } ref->Next = malloc (sizeof (MenuItem)); ref = ref->Next; (*Menu)->NumItems += 1; } ref->Name = malloc (strlen (Name));