Verkettete Liste in C
lima-city → Forum → Programmiersprachen → C/C++ und D
angst
arbeiten
beachten
benutzername
byte
code
compiler
datei
eingeweihten betrachter
funktion
memory
null
problem
quellcode
stil
tun
zeiger
-
#include "user.h" #include <malloc.h> #include <stdio.h> #include <string.h> struct s_benutzer { char benutzername[20]; struct s_benutzer *next; }; struct s_benutzer *s_users; struct s_benutzer *s_first; void append_user(const char* username) { struct s_benutzer *ptr; if( s_first == NULL ) { s_first=malloc(sizeof(struct s_benutzer)); strcpy(s_first->benutzername,username); s_first->next = NULL; } else { ptr = s_first; while( ptr->next != NULL ) ptr = ptr->next; ptr->next = malloc( sizeof( *ptr ) ); ptr=ptr->next; strcpy(ptr->benutzername,username); ptr->next=NULL; } } void print_users() { struct s_benutzer *ptr; for(ptr=s_first;ptr != NULL;ptr = ptr->next) { printf("[Benutzername:] %s\n",ptr->benutzername); } } void clear_list() { struct s_benutzer *ptr; struct s_benutzer *ptr2; for(ptr=s_first;ptr != NULL;) { ptr2=ptr; ptr=ptr->next; printf("Bye bye, %s\n",ptr2->benutzername); free(ptr2); } }
Ist der Code so korrekt?! Ich habe Angst, das bei clear_list() irgendein Memory Leak entsteht. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ist der Code so korrekt?!
Was sagt dein Compiler?
Ich habe Angst, das bei clear_list() irgendein Memory Leak entsteht.
Möglicherweise gibts schon vorher Probleme:
Du solltest den Rückgabewert von malloc() immer erst prüfen, bevor du ihn als Zeiger auf einen freien Speicherbereich benutzt.
Wenn du Zeichenketten kopierst, solltest du die Längenbeschränkung der Zielvariablen beachten (bei dir 19 Bytes + 0-Byte). Wenn du schon strcpy() verwendest, solltest du vorher wenigstens die Länge der Ursprungszeichenkette begrenzen.
Das Arbeiten mit globalen Variablen (s_users, s_first) find ich auch nicht so prickelnd. Du änderst deren Werte innerhalb deiner Funktionen -- das heißt, sie haben unerwartete Seiteneffekte. Stell dir eine C-Quellcode-Datei vor, die deine Funktionen nutzt. Für einen nicht eingeweihten Betrachter ist nicht ersichtlich, dass bspw. appen_user() die globale Variable s_first manipuliert. Hat zwar nichts mit Speicherverwaltung zu tun, gilt aber als schlechter Stil. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage