malloc() und der cast



  • Fabeltier schrieb:

    Hallo,
    ich hab mal ne Grundsatzfrage zu malloc() und dem casting, welches ich dabei manchmal sehe:
    Was ist der Unterschied zwischen a) und b) oder gibt es da keinen - ich glaube bei mir noch nie einen Unterschied bemerkt zu haben?

    a) ohne cast:

    char* pText = NULL;
    if( (pText = malloc(10 * sizeof(char))) == NULL) return EXIT_FAILURE;
    

    b) mit cast:

    char* pText = NULL;
    if( (pText = (char*)malloc(10 * sizeof(char))) == NULL) return EXIT_FAILURE;
    

    um zur ursprünglichen Frage zu kommen: Die Variante b kann versteckte Fehler vertuschen, die man nur sehr mühsam zu finden sind [1].

    Der Grund warum sehr oft ein gecastetes malloc sieht, ist dass viele Autoren (von Büchern, Tutorialen, usw) C Code mit einem C++ Compiler kompilieren und dort muss man den void Pointer casten.

    [1] bsp: du schreibst ein Programm, welches nicht automatisch gegen die C Bibliothek gelinkt wird. Du hast es eine eigene Funktion malloc die einen int zurückliefert (und an dieser Stelle sei es eagl, was sie tut) und aus alter Gewohnheit hast du die Variable als char* statt int deklariert. Die Variante a hätte den Fehler gefunden und dir mind. eine Warnung gegeben. Variante b hätte dem Compiler gesagt, "sche.iss drauf, ob's feherhaft ist, tu es einfach ohne zu meckern". 😉



  • Gut, also danke fuer die ausfuehrliche Beantwortung meiner Frage. Ich verstehe das jetzt mal als "Stilfrage" und denke, beide Moeglichkeiten haben ihre Vorteile und Nachteile. Moeglichkeit C gefaellt mir jedoch am besten, danke fuer den Tipp 😉


Anmelden zum Antworten