Frage zu malloc realloc 2d Array
-
Hallo Leute,
ich habe eine Frage. Ich möchte mir dynamisch ein 2d Array erstellen. Die Anzahl der Zeilen weiß ich, somit kann ich da ein malloc machen. Die Anzahl der Elemente pro Zeile ist aber variabel und wird beim Eingeben eines neuen Elements größer. Der User wählt also aus in welche Zeile er das Element speichern möchte. Wenn ich nun an Anfang für jede Zeile ein Element mit malloc allokiere und der User dann aber in diese Zeile kein Element eingibt, habe ich dort ja trotzdem ein Element mit einen beliebigen Wert, der aber nichts mit der User Eingabe zu tun hat oder irre ich mich da? Wie kann ich das umgehen?
Gibt er ein Element ein, erweitere ich die Zeile mit realloc um ein weiteres Element.Habe ich hier einen Denkfehler oder ist das in der Tat so? Code spar ich euch weil es eigentlich kein Code Problem ist.
MfG
-
Du kannst ein (statisches) Array mit Zeigern auf die Zeilen machen.
Wenn in einer Zeile keine Daten drin stehen, dann holst du auch keinen Speicher mit
malloc
, sondern speicherst eine NULL.Ein Array (in C) ist nach der Definition in der Größe und Lage (Adresse) nicht mehr veränderbar. Zudem ist es ein zusammenhängender Speicherbereich, egal wieviel Dimensionen.
Daher hast du kein Array.
-
Also ich habe folgendes Array:
int** array;
Dann mache ich mir mal 5 Zeilen:
array = (int**)malloc(5 * sizeof(int*));
Und nun, muss ich ja für jede Zeile ein malloc machen, damit ich später überhaupt ein realloc machen kann oder? Also muss ich mir für jede Zeile schon mal genug Speicher für ein Element allokieren also so:
for (int i = 0; i < 5; i++) *(array + i) = (int*)malloc(sizeof(int));
Nur jetzt ist es ja so, ich habe in jeder Zeile Speicher für ein Element, wenn der User jetzt in der 2. Zeile ein Element einfügt, allokiere ich mit realloc ein weiteres Element, nur, dann hab ich ja immer ein Element zum Schluss zu viel oder nicht?
Mein Array müsste dann ja so aussehen nach dem initialisieren:
324234
3121
8945
424642
2424Also 5 Zeilen und in jeder Zeile ist ein Element, da noch keines eingefügt wurde ist dies ja beliebig bzw. nicht definiert, je nachdem was auf der Speicheradresse liegt. Stimmt mein Gedanke so oder hab ich was ganz falsch verstanden? Und das möchte ich nun verhindern.
-
Warum liest du die Antwort von DirkB nicht und versuchst wenigstens, davon was zu begreifen? Die Antwort enthält alles, was du gefragt hast und mehr.
Deshalb wiederhole ich das hier nicht.
Du selbst warst der Meinung, ohne Codebeispiel auskommen zu können. Und jetzt plötzlich hast du doch wieder Probleme? Was denn nun?
-
Habe die Antwort falsch verstanden, nun hab ich es aber verstanden.
-
Noch als Tipp:
Lies dir mal durch, wasrealloc
beim ersten Parameter akzeptiert: http://www.cplusplus.com/reference/cstdlib/realloc/