struct + zeiger?
-
Hallo
Ich war mir sicher im zweiten Beispiel auch ein
test->text = new char[6];zu sehen, wurde es schon wegeditiert?
Tutorials zum Thema C-Strings wirst du eher im Ansi-C Forum finden, hier im C++ Forum vermeidet man rohe Speicherverwaltung lieber und benutzt std::string.
bis bald
akari
-
akari schrieb:
Hallo
Ich war mir sicher im zweiten Beispiel auch ein
test->text = new char[6];zu sehen, wurde es schon wegeditiert? Aber auch ohne das sind beide nicht gültig, durch das delete auf ein String-Literal.
Tutorials zum Thema C-Strings wirst du eher im Ansi-C Forum finden, hier im C++ Forum vermeidet man rohe Speicherverwaltung lieber und benutzt std::string.
bis bald
akariWenn er delete test; macht, dann pasts wieder. (Er fordert ja das Objekt an und nicht den string).
-
Hallo
Ich merk schon wir kommen hier schon zeitlich durcheinander... bleibt gar nicht genug Zeit seine Beiträge zu korrigieren

So wie das zweite Beispiel jetzt dasteht hat drakon natürlich Recht.
bis bald
akari
-
@akari: Nein, im zweiten Beispiel ist nie ein test->text = new char[6]; gewesen.
Danke erstmal, d.h. also folgendes wäre korrekt:
struct TEST { char* text; }; int main() { TEST* test; test = new TEST; test->text = "Hallo"; // mache irgendwas delete test; }Was wiederum bedeutet, dass mit "new TEST" auch für test->text Speicher reserviert wird? Aber wieviel ist das?
lg Max
-
In dem Fall sollte 'text' wie folgt deklariert sein:
struct TEST { const char* text; };Was wiederum bedeutet, dass mit "new TEST" auch für test->text Speicher reserviert wird? Aber wieviel ist das?
Genau so viel wie ein Zeiger auf deinem Rechner benötigt (vermutlich 4 oder 8 Byte).
-
Hm... wieso?
lg Max
-
für test->text wird zwar speicher reserviert, aber test->text selbst zeigt nicht auf reservierten speicher, sondern ins nirvana. erst mit
test->text = "Hallo"zeigt test->text auf eine speicherstelle, auf die du zugreifen darfst (allerdings nur lesend!).das beispiel, das du suchst, um zu verstehen, was man dir schreibt:
char* text = new char[6]; strncpy (text, "Hallo", 6); delete[] text;dieses beispiel macht genau das, was du in deinem allerersten beispiel versuchtest du zu erreichen; nur dass es funktioniert.
-
struct TEST { char* text; }; int main() { TEST* test; test = new TEST; test->text = new char[6]; strncpy(test->text,"Hallo",6); // mache irgendwas delete[] test->text; delete test; }Funktioniert! Danke!
lg Max
-
-
Gibt es eigentlich einen guten Grund den ganzen Kram auf den Heap zu schaufeln?
-
David_pb schrieb:
Gibt es eigentlich einen guten Grund den ganzen Kram auf den Heap zu schaufeln?
Ich denke mal, dass er das mehr als Übung gemacht hat und nicht als reeles Beispiel.
-
Korrekt.
Der eigentliche Zweck soll sein eine beliebige Anzahl an structs dieser Art (d.h. mit enthaltenen Zeigern) erstellen zu können, ohne bei Nichtnutzung überflüssigen Speicherplatz reserviert zu haben.
lg Max