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));
    

Anmelden zum Antworten