Speicher auf Struct mit new oder malloc reservieren?



  • Hallo!

    Ich habe folgende Struktur:

    typedef struct
    {
      uint32_t            number_roi;
      uint32_t            number_coordinates;
    } board_roi;
    

    Nun kann ich mir doch folgendermaßen einen Pointer auf die Struktur erzeugen:

    board_roi * br;
      br = new board_roi;
      br->number_roi = 5;
    

    Was ist der Unterschied zu folgendem Ansatz?:

    board_roi * br;
      br = (board_roi*) malloc(1* sizeof(board_roi));
      br->number_roi = 5;
    

    Das ist doch äquvalent oder gibt es einen Unterschied zwischen den beiden Versionen?

    Danke im Voraus für eure Hilfe!



  • :xmas1:
    malloc ist C
    new ist C++

    structs sehen in C++ so aus:

    struct board_roi
    {
      uint32_t            number_roi;
      uint32_t            number_coordinates;
    };
    

    wie bei klassen



  • Hallo,
    danke für deine Antwort.

    OK, malloc ist C. Aber was ist, wenn ich einen Array dynamisch erzeugt habe und hinterher die Größe ändern muss? Dann benutzt man doch meistens auch malloc , ob man in C++ programmiert, oder sehe ich das falsch?



  • dafür nimmt man in C++ std::vector



  • Ach so ist das...okay danke.
    Leider kann ich den Vector nicht benutzen, da das Programm mithilfe der Strukturen auf ein selbstgebautes Board zugreift.

    Trotzdem danke!



  • und warum sollte da vector nicht gehen?



  • Für PODs könnte man malloc() und free() schon benutzen - ich würde aber streng davon abraten. Denn bei komplexeren Datentypen kommt es schnell zu Problemen, weil das Objekt nicht konstruiert, sondern nur Speicher dafür allokiert wird. In C++ würde ich dem Struct vielleicht auch noch Konstruktoren hinzufügen, damit für sichere Initialisierung gesorgt ist.


Anmelden zum Antworten