kostenloser Webspace werbefrei: lima-city


Verkettete Liste in C

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    cpp0x

    cpp0x hat kostenlosen Webspace.

    #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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage


  3. 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.
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!