realloc auf zweidimensionales array
-
Codemäßig sieht das so aus:
char ** ID_array; ID_array = (char**) malloc(1*sizeof(char*)); ID_array[h]=(char*)malloc(16*sizeof(char)); memcpy(ID_array[0], string1, 16); //jetzt möchte ich dass array um eins vergrößern ID_array = (char**)realloc(ID_array, (2*sizeof(char*))); //jetzt sollte der zweite string reingeschrieben werden memcpy(ID_array[1], string1, 16); //hier stürzt er aber ab!!
-
2 Fehler haben sich eingeschlichen;
es muss heissen:ID_array[0]=(char*)malloc(16*sizeof(char)); //und memcpy(ID_array[1], string2, 16);
aber eigentlich nicht so wichtig, ich muss mit dem Programm bis morgen fertig sein und mit realloc hab ich noch nicht gearbeitet??
-
Bei realloc mußt du noch ein beachten, wenn es ein c++ Kompiler ist mußt du casten [ =(char*)real....], und bei einem C Kompiler nicht.
Ich hatte ru realloc hier schon eine Frage gestellt, schau Dir die mal an da findest du noch etwas hilfreiches.
http://www.c-plusplus.net/forum/viewtopic.php?t=54326
-
so jetzt nocheinmal, weils immer noch nicht klappt
char ** ID_array; ID_array = (char**) malloc(1 * sizeof(char*)); for(int j=0;j<1;j++) ID_array[j]=(char*)malloc(16*sizeof(char)); //realloc ID_array = (char**)realloc(ID_array, (2)*sizeof(char*)); for(int j=0;j<2;j++) { ID_array[j]=(char*)realloc(ID_array[j],16*sizeof(char)); }
bei der zweiten schleife stürtzt das Programm ab, warum?????????
-
Also vom Quelltext her ist alles io.
Bei mir schmiert es auch ab.Ich schau mal, ob ich Dir da noch helfen kann.
-
echt eine kleine notsituation
, ich muss morgen damit fertig sein, sonst wird mir der Kopf abgeschraubt, vielleicht habt ihr noch eine Idee, was falsch sein konnte??
-
Vielleicht gibt es doch eine Lösung???
ich geb nicht auf
-
Also ich kann es mir nicht erklären, sorry ich bin am ende.
-
hallo,
also ich komm, wie bereits erwaehnt, hier nicht weiter. Wenn das mit realloc nicht klappt, meine Frage an Euch: Ich hab einen C++ Compiler sollte aber mein Programm in C schreiben, ist das eigentlich legitim wenn ich jetzt ein STL container z.B. vector benutzen möchte?
Ich wüßte mir i.A. nicht anderst zu helfen.
-
adelegg schrieb:
bei der zweiten schleife stürtzt das Programm ab, warum?????????
Du rufst realloc für ID_array[1] auf, hast aber nie alloc dafür aufgerufen.
Für die neu hinzugekommenen char* musst du malloc aufrufen:
char ** ID_array; ID_array = (char**) malloc(1 * sizeof(char*)); for(int j=0;j<1;j++) ID_array[j]=(char*)malloc(16*sizeof(char)); //realloc der bestehenden char* ID_array = (char**)realloc(ID_array, (2)*sizeof(char*)); for(int j=0;j<1;j++) { ID_array[j]=(char*)realloc(ID_array[j],16*sizeof(char)); } //malloc der neuen char* for(int j=1;j<2;j++) { ID_array[j]=(char*)malloc(16*sizeof(char)); }
-
@MFK
ok jetzt stürzt das Programm nicht mehr ab, aber der Inhalt des "alten arrays" bleibt nicht erhalten, das aber soll doch genau der Fall sein! Ich möchte mein Array vergrößern aber den bisherigen Inhalt beibehalten.
-
Hast du auf die Start- und Endwerte der beiden Schleifen geachtet?
Wie sieht dein Code aus?
-
Den code hab ich bereists gepostet.
Bei der Initialisierung (mit malloc) handelt sich um ein Array in das genau ein Eintrag mit 16 Zeichenfolgen belegt wirdMit realloc soll dieser Eintrag genau um einen Wert mit 16 Zeichenfolgen vergrößert werden. Startwert und Endwert:
for(int j=0;j<2;j++)
ID_array = (char**)realloc(ID_array, 2); //array wird um einen Eintrag erhöht, statt 1 steht hier 2 for(int j=0;j<2;j++) { ID_array[j]=(char*)malloc(16); // ID_array[j] wird genau um einen Eintrag mit size_t = 16 erhöht }
mit malloc aber wir doch mein alter Eitrag gelöscht???
-
Schau dir meinen Code bitte genauer an. Du sollst nicht jedes realloc durch malloc ersetzen, sondern du brauchst zwei Schleifen statt einer.
Für die bereits bestehenden char* musst du realloc aufrufen, für die neu hinzugekommenen malloc.
Die erste (realloc) Schleife läuft von 0 bis <ALTE_GROESSE, die zweite (malloc) von ALTE_GROESSE bis <NEUE_GROESSE.
-
Die erste (realloc) Schleife läuft von 0 bis <ALTE_GROESSE
und genau bei dieser Schleife stuerzt mein Programm ab!
-
adelegg schrieb:
Die erste (realloc) Schleife läuft von 0 bis <ALTE_GROESSE
und genau bei dieser Schleife stuerzt mein Programm ab!
Der Code, den du zwei Beträge vorher gezeigt hast, hat gar kein realloc in einer Schleife. Willst du mich veräppeln?
-
@MFK
sorry, jetzt klappts, vielen vielen DANK