Seite 1 von 1

malloc/realloc

Verfasst: Do Sep 18, 2014 4:13 pm
von Daniel200289
Hallo Leute,

weiß einer, wie ich den Wert, wo jetzt 1000 steht, während einer Schleife jeweils um 1 erhöhe, ohne das die Daten, die bis dahin in histo gespeichert sind, gelöscht werden?

Code: Alles auswählen

char **histo;

histo = realloc(histo, 1000 * sizeof(int));
Wenn ich die Zeile "histo = realloc..." jedes Mal am Anfang der Schleife bringen würde, so würde ja jedesmal komplett neuer Speicher für histo reserviert werden.

Bin dankbar für Ideen :) Dank schonmal

Re: malloc/realloc

Verfasst: Do Sep 18, 2014 5:10 pm
von cloidnerux
weiß einer, wie ich den Wert, wo jetzt 1000 steht, während einer Schleife jeweils um 1 erhöhe, ohne das die Daten, die bis dahin in histo gespeichert sind, gelöscht werden?
Die Lösung für dieses Problem wäre den Pointer, den realloc zurück gibt zwischen zu speichern, die alten Daten in den neuen Speicher zu schreiben und dann den zwischengespeicherten Pointer in histo zu schreiben.

Sinnvoller insgesamt ist es aber direkt den benötigen Speicher für histo zu berechnen oder eine Datenstruktur(vektor z.B) zu nutzen.

Re: malloc/realloc

Verfasst: Do Sep 18, 2014 5:47 pm
von mfro
cloidnerux hat geschrieben:
weiß einer, wie ich den Wert, wo jetzt 1000 steht, während einer Schleife jeweils um 1 erhöhe, ohne das die Daten, die bis dahin in histo gespeichert sind, gelöscht werden?
Die Lösung für dieses Problem wäre den Pointer, den realloc zurück gibt zwischen zu speichern, die alten Daten in den neuen Speicher zu schreiben und dann den zwischengespeicherten Pointer in histo zu schreiben.
Das macht realloc() schon selbst - die im "alten" Speicherblock gespeicherten Daten sind auch nach dem Aufruf (sofern man nicht "geschrumpft" hat) weiterhin im "neuen" vollständig erhalten, evt. aber mit anderen Speicheradressen (Pointer, die in den Datenbereich zeigen, müssen also angepaßt werden).

Wirklich sinnvoll wäre m.E. wenn der Fragesteller erst mal erklärt, welche Problemstellung zu dieser (bestenfalls "seltsamen") Konstruktion geführt hat. Ich bin sicher, da gibt's bessere Lösungen.

Re: malloc/realloc

Verfasst: Do Sep 18, 2014 6:42 pm
von Daniel200289
Okay zur Problemstellung allgemein:

ich habe in einem Char Wörter vorgegeben (der Menge 1 - 1000).

Nun möchte ich durch eingaben (so viele nacheinander wie ich möchte) Wörter der Länge von maximal 256 Zeichen an die nächste Stelle im Char speichern. Problem ist, ich weiß vor Programmstart nicht, wie viele Wörter ich eingeben will.

Deswegen muss ich den Speicher dynamisch reservieren und dann natürlich auch vor jeder neuen Eingabe anpassen und neuen Speicher reservieren.

Re: malloc/realloc

Verfasst: Do Sep 18, 2014 7:42 pm
von Daniel200289
Ich habs gelöst.

Trotzdem danke für eure Hilfe =)