gcc: malloc ohne cast



  • dann ist doch aber das casten des Rückgabewertes von malloc nicht gefährlich, allenfalls überflüssig?! gefährlich wäre nur das Weglassen des casts, wenn man gleichzeitig stdlib.h nicht included?



  • Original erstellt von stahl:
    dann ist doch aber das casten des Rückgabewertes von malloc nicht gefährlich, allenfalls überflüssig?! gefährlich wäre nur das Weglassen des casts, wenn man gleichzeitig stdlib.h nicht included?

    Ganz genau!



  • * ups *

    [ Dieser Beitrag wurde am 20.10.2002 um 12:45 Uhr von elise editiert. ]



  • Original erstellt von stahl:
    gefährlich wäre nur das Weglassen des casts, wenn man gleichzeitig stdlib.h nicht included?

    Nein, gefaehrlich waere das casten, wenn man die stdlib.h nicht einbindet.

    Sollte die stdlib.h eingebunden sein, dann ist ein cast nur ueberfluessig und unschoen. Sollte die stdlib.h fehlen, ist der cast gefaehrlich.

    Beim weglassen des casts und nicht einbinden der stdlib.h kommt eine Compiler Warnung - beim casten kommt diese warnung nicht!



  • ich könnte mich jetzt damit zufrieden geben und in zukunft einfach mit stdlib.h und ohne cast glücklich werden, aber eines noch:

    // ohne <stdlib.h>
    char *ptr;
    ptr = (char*)malloc(123)
    

    was ist daran gefährlich? der compiler wird damit ja auch glücklich?!



  • naja ... Wenn Du mein Posting oben nochmal liest, ... egal ... 😉

    Also: Du castest einen Rückgabewert 'int' in einen 'char*'. Jetzt kann ein int im Speicher anders abgelegt sein, wie ein Pointer. Und genau dann hast Du ein Problem damit. Auf x86-PC's sollte das IMHO funktionieren. Solche Fehler sind schwer zu finden.

    Und: Wenn die stdlib.h nicht inkludiert wird, dann werden auch Aufrufe der Form

    malloc("123");
    

    akzeptiert.



  • Original erstellt von mady:
    Solche Fehler sind schwer zu finden.

    warum kann der compiler nicht auch bei sowas warnen?!

    im moment hab ich wohl generell ein problem mit dem casten.
    jedenfalls danke soweit.



  • Original erstellt von stahl:
    warum kann der compiler nicht auch bei sowas warnen?!
    ....

    Ein cast in C bedeutet immer, dass der Programmierer genauestens über diese Problematik (u.a.) bescheid weiß. Deshalb bekommst Du keine Warnung.



  • er kann warnen, weil du eine Funktion ohne Prototyp benutzt. Mit -Wall tut er das auch.



  • ja, bewahrt mich aber leider auch nicht vor "unglücklichen" casts.


Anmelden zum Antworten