Structs allozieren ?



  • Hi @ all !
    Kann man eigentlich Structs via malloc allozieren ?

    Zum Beispiel

    struct MyStruct My = (struct MyStruct*) malloc (Anzahl * sizeof(struct MyStruct)
    


  • ja, das geht, aber dann so:

    struct MyStruct *My = (struct MyStruct*) malloc (Anzahl * sizeof(struct MyStruct));
    


  • Hallo,
    wobei man in C++ für gewöhnlich das "struct" weglässt und in C dafür den Cast.

    Sprich:

    // c++-isch
    MyStruct* my = static_cast<MyStruct*>(malloc(sizeof(MyStruct)));
    
    // c-isch
    struct MyStruct* my = malloc(sizeof(struct MyStruct));
    


  • wobei man in c++ sowieso eher "new" verwenden würde



  • HumeSikkins schrieb:

    Hallo,

    // c++-isch
    MyStruct* my = static_cast<MyStruct*>(malloc(sizeof(MyStruct)));
    

    Warum static_cast<> ? Ist das nicht eher ein Fall für reinterpret_cast<> ?

    MfG



  • eViLiSSiMo schrieb:

    Warum static_cast<> ? Ist das nicht eher ein Fall für reinterpret_cast<> ?

    ich denke es geht beides, aber static_cast wird üblicherweise dafür verwendet. warum auch immer.



  • net schrieb:

    eViLiSSiMo schrieb:

    Warum static_cast<> ? Ist das nicht eher ein Fall für reinterpret_cast<> ?

    ich denke es geht beides, aber static_cast wird üblicherweise dafür verwendet. warum auch immer.

    Gerade das warum interessiert mich.



  • eViLiSSiMo schrieb:

    net schrieb:

    eViLiSSiMo schrieb:

    Warum static_cast<> ? Ist das nicht eher ein Fall für reinterpret_cast<> ?

    ich denke es geht beides, aber static_cast wird üblicherweise dafür verwendet. warum auch immer.

    Gerade das warum interessiert mich.

    Ein static_cast wird immer dann benutzt, wenn eine Konvertierung durchgeführt werden soll für die die gegenteilige Konvertierung implizit ist. Da es eine implizite Konvertierung von Data* nach void* gibt, verwendet man einen static_cast für die Konvertierung von void* nach Data*.

    Ein reinterpret_cast verwendet man für den cast zwischen unverwandten Typen (das Mapping ist dabei immer "implementation defined"). Also z.B. zwischen Data* und OtherData* wobei Data und OtherData zwei nicht verwandte Typen wären. In diesem Fall ist dann das einzig sinnvolle was du mit dem Ergebnis machen kannst es mit einem reinterpret_cast zurück zu casten.


Anmelden zum Antworten