Dynamisches Array fixer String Arrays?
-
C++ wenn möglich

-
meinst du sowas? bin etwas schwer von begriff heut
string** str = new string*[10]; for (int i=0;i<10;++i) str[i] = new string[2]; str[0][0] = "A"; //String 1 posi 1 str[0][1] = "B"; //String 1 posi 2 cout<<str[0][1]; for (int i=0;i<10;++i) //nicht vergessen aufzuräumen delete[] str[i]; delete[] str;
-
Hey danke

Wenn ich genauer darüber nachdenke, ist mir C allerdings doch lieber, da ich das Array dynamisch alloziieren und somit realloc verwenden möchte. Daher habe ich den Code wie folgt geändert:
using std::string; string** strMagicKey = (string **) malloc(sizeof(string *) * 8); strMagicKey = (string **) realloc(strMagicKey, sizeof(string *) * 10); char *strTmp = (char *) malloc(sizeof(char)); for(int i = 0; i < 10; i++) { strMagicKey[i] = new string[2]; for(int j = 0; j < 2; j++) { sprintf(strTmp, "Test: %i/%i\n", i, j); strMagicKey[i][j] = strTmp; printf(strMagicKey[i][j].c_str()); } delete strMagicKey[i]; } free(strMagicKey), free(strTmp);Klappt wunderbar. Da ich allerdings bereits malloc()'s verwende, möchte ich der Form halber auch für das Allozieren der beiden Strings malloc verwenden, also statt:
strMagicKey[i] = new string[2];und
delete strMagicKey[i];jetzt neu
strMagicKey[i] = (string *) malloc(sizeof(string) * 2);und
free(strMagicKey[i]);Gibt aber jetzt plötzlich einen Laufzeitfehler

Was mach' ich da falsch
?
-
<Sarkasmus pur> Wirklich eine super Idee hier malloc und seine Companen zu verwenden!!

Villeicht liegts ja daran, dass man damit gar keine C++ Objekte anlegen kann weil keine Konstruktoren aufgerufen werden?
-
Autsch, das tut weh...Ist aber berechtigt

Naja, jedenfalls danke und greeetz
Kessi
-
wieso kannst du denn mit new das array nicht dynamisch allozieren und eben delete[] benutzen?
-
Naja, mit new und delete gibt's keinen realloc()

Allerdings wäre ist das bei strMagicKey, welcher nicht dynamisch sein muss, nur eine Formsache. Worauf mich Thomas allerdings eben so freundlich aufmerksam gemacht hat, ist, dass mit malloc und free in C++ keine Kon- bzw. Destruktoren von Objekten aufgerufen werden.
Was, da ich versuche, ein String Objekt zu erzeugen, trotz aller Formschönheit nur von Nachteil sein kann :p
-
KessiMC schrieb:
So sieht z.B. ein MagicKey aus. Jetzt ist es aber so, dass es beliebig viele solcher MagicKeys geben kann, welche ich gerne in einem entsprechenden Array speichern würde.
Wie lässt sich das also anstellen
?Mit einem Vector oder Deque
-
KessiMC schrieb:
char *strTmp = (char
malloc(sizeof(char));sprintf(strTmp, "Test %i", i);
free(strTmp);[/cpp]
Ich hoffe, du weißt, was du DAMIT erreichst: BUMM (wenn nicht, schau dir mal an, wieviel Platz du angefordert hast, und wieviel Platz du verwendest). Da du mit C++ arbeitest, nimm lieber C++ Methoden zum Zusammenbauen deiner Strings (im Notfall Stringstream, aber für dich reicht vermutlich "strMagicKey[i] = string("Test ") + (i+'0');" aus).
-
KessiMC schrieb:
...
Wenn ich genauer darüber nachdenke, ist mir C allerdings doch lieber, da ich das Array dynamisch alloziieren und somit realloc verwenden möchte....Wieso brauchst Du "realloc()" ?
Wieso kann man mit C++ nicht "dynamisch allozieren ?
Wieso packst Du die Strings nicht einfach in einen Standardcontainer ?Fragen über Fragen ....
Gruß,
Simon2.
-
man nehme
vector<pair<string,string> >das ganze erzeug ein dynamisches array von paaren