realloc auf mit new erzeugte Objekte?



  • Hi,
    man kann ja dynamisch ein char-array auf mehrere Arten anlegen:

    char *_data = (char *)malloc(length);
    
    char * _data = new char[length];
    

    Das erste muss ja mit free geloescht werden, das andere mit delete. Wie sieht es jetzt aus wenn man per realloc die Groesse nachtraeglich aendert? Gibt es da eine C++-Funktion dafuer? Und was passiert wenn ich die falsche Funktion zum freigeben des Speichers nutze? (free() statt delete bspw.)
    C167



  • malloc und new haben nichts miteinander zu tun. sie arbeiten komplett unterschiedlich und eigentlich verwendet man nie malloc in c++

    ergo geht auch kein realloc, etc.

    realloc ist sowieso nicht moeglich wenn du nicht triviale objekte hast...



  • malloc und new haben nichts miteinander zu tun. sie arbeiten komplett unterschiedlich und eigentlich verwendet man nie malloc in c++
    ergo geht auch kein realloc, etc.

    Ja, deshalb meine Frage ja, weil das Programm vor mir eben in 100% der Faelle, in denen Speicher angefordert werden muss, mit malloc arbeitet und bei Bedarf mit realloc...

    realloc ist sowieso nicht moeglich wenn du nicht triviale objekte hast...

    Ja, das stimmt natuerlich, deshalb frage ich ja, ich weiss nicht wie sich solche mit new angelegte Objekte vergroessern/verkleinern lassen, malloc/realloc/free ist mir bekannt, aber was nimmt man da auf solchen "nicht triviale[n] objekte[n]"?


  • Administrator

    Man nimmt die Standard-Container:
    http://www.cplusplus.com/reference/stl/

    Grüssli



  • also anstelle dem ganzen manuellen Angefordere von Speicher einfach z.B. einen std::vector nehmen?



  • C167 schrieb:

    also anstelle dem ganzen manuellen Angefordere von Speicher einfach z.B. einen std::vector nehmen?

    Ja. Bequem und sicher - eben einer der grossen Vorteile von C++ 😉



  • Wozu sollte sich sonst jemand die Mühe gemacht haben eine Klasse für dynmaische Arrays zu erstellen, wenn du sie nicht mal für dynamische Arrays benutzt?



  • Don06 schrieb:

    Wozu sollte sich sonst jemand die Mühe gemacht haben eine Klasse für dynmaische Arrays zu erstellen, wenn du sie nicht mal für dynamische Arrays benutzt?

    Naja, es gibt doch noch genug andere Nutzer 😉

    Und zum Einsteigen bzw. Kennenlernen von Pointern, Templates und einigen anderen Dingen lohnt es sich, einmal eine eigene Containerklasse zu implementieren.



  • C167 schrieb:

    Ja, das stimmt natuerlich, deshalb frage ich ja, ich weiss nicht wie sich solche mit new angelegte Objekte vergroessern/verkleinern lassen, malloc/realloc/free ist mir bekannt, aber was nimmt man da auf solchen "nicht triviale[n] objekte[n]"?

    genau wie es realloc auch macht:

    neuen speicher anfordern (new)
    umkopieren (std::copy)
    alten speicher loeschen (delete)



  • Shade Of Mine schrieb:

    genau wie es realloc auch macht:
    neuen speicher anfordern (new)
    umkopieren (std::copy)
    alten speicher loeschen (delete)

    ein gutes realloc versucht aber erstmal, den vorhandenen block zu vergrössern, bevor es das tut, was du beschrieben hast.
    🙂


Anmelden zum Antworten