PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Reservierten Speicherbereich inkrementieren geht nicht, oder?



Netbek
19.11.2004, 22:56
Naja, ich wüsste nicht wie und denke auch nicht, dass es geht.
Will nur mal sicher gehen. Mann kann ja in C++ dynamischen Speicher reservieren(heap?).
Wenn das Programm dann aber plötzlich "merkt", dass ein Speicherbereich nicht ausreicht und daher noch mehr Speicher benötigt, dann muss ich doch eigentlich erneut grösseren Speicher reservieren und das Array, das auf dem unzureichenden Speicherbereich liegt in den neuen Bereich kopieren und kann nicht etwa die grösse des reservierten bereiches ändern. So wird es doch bei strings gelöst, oder?
Es erscheint mir auch logischer, weil das Betriebssystem ja dann das Speichermanagement komisch regeln müsste -> Es könnten nicht verschiedene speicherbereiche direkt hintereinander reserviert werden.

zB.
string fisch="lol";
string lalala="njam";
fisch+=lalala;

die beiden string haben irgendwo jeweils n char array bzw. n pointer drauf.
jetzt wird doch über die methode += nen neues char array erstellt bzw. speicher reserviert wo dann der inhalt von beiden anderen arrays nacheinander reinkopiert wird.
Dann wird der Speicher des alten arrays in fisch wieder freigegeben und der pointer, der auf das alte array zeigte, zeigt nun auf das neue array.
Hab' ich in etwa recht?

edit: ich könnte mir auch vorstellen, dass quasi ein array von pointern erstellt wird, welche auf die einzelnen char array fragmente, die entstehen, zeigen. Hielt' ich zumindest für ne geschickte lösung, unter umständen.

Dingsi
19.11.2004, 23:09
Jo. So wird das gemacht. @ 1.

@2. Ein Array von Pointern zu Arrays nennt man Multidimensionale Arrays. Damit kannst du dann z.B. Listen von Strings machen:
{
{"hans"},
{"peter"},
{"werner"}
}

Netbek
19.11.2004, 23:17
mit den fragmenten hab ich mir vorgestellt, dass die einzelnen fragmente vom "Darstellungsprogramm" oder beim schreiben in die Datei, zusammengesetzt werden.

Wenn also
zeiger[0](char zeiger) und len[0](int) auf ein char array "Hau" zeigen,
zeiger[1](char zeiger) und len[1](int) auf ein char array "smei" zeigen,
zeiger[2](char zeiger) und len[2](int) auf ein char array "ster" zeigen

und zeiger und int wären attribute einer art string klasse

fragmentstring sowieso="Hau";
sowieso+="smei";
sowieso+="ster";
sowieso.writetofile("blabla.txt");

in blabla.txt stünde dann "Hausmeister"

Hielt ich zumindest für n geschicktes "Speichermanagement", wenn lange array verwendet würden(Der Kopiervorgang fällt weg). Macht aber keinen sinn wenn ich ständig fisch+="a" mache, weil ja dann für jeden char ein neuer zeiger entsteht.

edit: Im Prinzip gehört der Thread ja ins Programmierforum, fällt mir grad ein :D