?
void AddButton (ButtonList ** Buttons, int x, int y, SDL_Surface * Active, SDL_Surface * Inactive, void (*Callback) (SDL_Surface * screen, int * done)) {
ButtonList * Ref;
if ((*Buttons) == NULL) {
(*Buttons) = malloc (sizeof (ButtonList));
(*Buttons)->x = x;
(*Buttons)->y = y;
(*Buttons)->Active = Active;
(*Buttons)->Inactive = Inactive;
(*Buttons)->Callback = Callback;
(*Buttons)->Index = 0;
(*Buttons)->IsActive = 0;
(*Buttons)->Next = NULL;
} else {
Ref = (*Buttons);
while (Ref->Next != NULL) { Ref = Ref->Next; }
Ref->Next = malloc (sizeof (ButtonList)); // Hier holst du Speicher
Ref->Next->x = x;
Ref->Next->y = y;
Ref->Next->Active = Active;
Ref->Next->Inactive = Inactive;
Ref->Next->Callback = Callback;
Ref->Next->Index = Ref->Index + 1;
Ref->Next->IsActive = 0;
Ref->Next = NULL; // Und hier sagst du vergiss es Ref->Next->Next = NULL;
}
}
Du solltest die Funktion mal aufräumen.
Du machst in beiden Teilen fast das Gleiche. Das kannst du zusammenfassen. :xmas1: