malloc/realloc

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Daniel200289
Beiträge: 20
Registriert: Mo Aug 11, 2014 12:17 pm

malloc/realloc

Beitrag von Daniel200289 » Do Sep 18, 2014 4:13 pm

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

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: malloc/realloc

Beitrag von cloidnerux » Do Sep 18, 2014 5:10 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

mfro
Beiträge: 346
Registriert: Mi Jan 16, 2013 4:58 pm

Re: malloc/realloc

Beitrag von mfro » Do Sep 18, 2014 5:47 pm

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.
It's as simple as that. And remember, Beethoven wrote his first symphony in C.

Daniel200289
Beiträge: 20
Registriert: Mo Aug 11, 2014 12:17 pm

Re: malloc/realloc

Beitrag von Daniel200289 » Do Sep 18, 2014 6:42 pm

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.

Daniel200289
Beiträge: 20
Registriert: Mo Aug 11, 2014 12:17 pm

Re: malloc/realloc

Beitrag von Daniel200289 » Do Sep 18, 2014 7:42 pm

Ich habs gelöst.

Trotzdem danke für eure Hilfe =)

Antworten