Übergabe char* an Klasse - Speicher allokieren?
-
Hallo zusammen,
Beispiel:
classname::construct(char* data, int size) { classdata=data; classsize=size; }Nun die Frage muss der Speicher für "char* classdata" in der Klassen internen allokiert werden?
Sprich:(char*)malloc(size);Weil es funktioniert ja auch ohne?
Danke Gruß
-
Bitte mit Erklärung! Vielen Dank!
-
Also ich meine Nein da der Speicher bereits allokiert ist und ich nur einen Zeiger auf diesen übergebe.
-
Und wie würde man zusätzlichen Speicher allokieren nachdem bereits einmal speicher für eine char* allokiert wurde?
Danke Gruß
-
Klar141 schrieb:
Nun die Frage muss der Speicher für "char* classdata" in der Klassen internen allokiert werden?
Das kommt drauf an, ob du eine Kopie der Daten haben willst, oder die Originaldaten einfach referenzieren willst. Was hast du vor?
Benutze kein malloc / free.
Benutze kein new / delete.
Benutze smart pointer.Klar141 schrieb:
Und wie würde man zusätzlichen Speicher allokieren nachdem bereits einmal speicher für eine char* allokiert wurde?
Mit realloc, sofern mit C-Funktionen alloiziert wurde. Anders geht's nicht.
Nutz hierfür std::vector.
-
Klar141 schrieb:
Weil es funktioniert ja auch ohne?
Sprach der Programmierer, bevor er sich in den Fuß schoss...
(Das "es funktioniert ja" ist einfach eine zu gute Vorlage aus der Praxis)Klar141 schrieb:
Nun die Frage muss der Speicher für "char* classdata" in der Klassen internen allokiert werden?
Kommt darauf an woher der Zeiger kommt, wie dieser freigegeben und in deiner Klasse genutzt werden soll. Wenn die Klasse nur auf diesen Verweisen soll (und der Speicher über die Lebenszeit der Klasse nicht freigegeben wird) kann man wohl mit einem Zeiger ohne eigene Allozierung leben. Die Frage nach zusätzlichen Speicher deutet für mich aber an, das dies nicht der Fall ist, zudem stellt sich die Frage ob die Daten modifiziert werden sollen. Dies alles ist aber nicht erkennbar, auch nicht wo dieser Speicher herkommt - so das man hier keine sinnvollen Antworten geben kann.
-
Danke für die Antworten! Jetzt habe ichs kapiert.
Wie kann ich eig. zusätzlich zum bereits allokierten Speicher zusätzlichen Speicher allokieren also einfach erweitern?
Danke Gruß
-
Mit
malloc()alloziierter Speicher? ->realloc(). Tu es nicht.
Mitnew? Garnicht. Neuen Speicher passender Größe anfordern, alte werte kopieren, alten Speicher freigeben. Tu es nicht.
std::vector!!!