Hallo
Wie kann ich so etwas:
int* pStructure = new int[1];
.. während der Laufzeit noch vergrössern, ohne einen vollkommen neuen Speicherbereich zu reservieren?
Einfach so, dass die vorhandenen Daten so bleiben wie sie sind und das Array noch etwas mehr Platz hat.
Ich möchte das nach Möglichkeit ohne std::vector machen.
Schon mal Danke!
Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge
In meinem Fall ist es wohl am besten, wenn ich das Array stufenweise vergrössere.
Aber wähle die stufen nicht zu klein. Am besten mit zwei variablen für verwendet und alloziert. Wenn dann der platz nicht mehr reicht, einfach ein großes stück mehr allozieren.
Im beispiel wäre dann "oldsize" die benutzte größe und "newsize" die allozierte.
Ist alles verbraucht, dann kann so etwas passieren:
if(oldsize>=newsize){
int *newP=new int[newsize+1000];//z.b.
//hier fehlerbehandlung
newsize+=1000;
for(int i=0;i<oldsize;i++) newP[i]=pStructure[i];
//bzw. in unkritischen fällen wie hier,
//wo keine internen adressen angepasst werden müssen
memcpy(newP, pStructure, sizeof(int)*oldsize);
delete[] pStructure;
pStructure=newP;
}
mr.escape
Aber wähle die stufen nicht zu klein. Am besten mit zwei variablen für verwendet und alloziert. Wenn dann der platz nicht mehr reicht, einfach ein großes stück mehr allozieren.
Im beispiel wäre dann "oldsize" die benutzte größe und "newsize" die allozierte.
Ist alles verbraucht, dann kann so etwas passieren:
if(oldsize>=newsize){
int *newP=new int[newsize+1000];//z.b.
//hier fehlerbehandlung
newsize+=1000;
for(int i=0;i<oldsize;i++) newP[i]=pStructure[i];
//bzw. in unkritischen fällen wie hier,
//wo keine internen adressen angepasst werden müssen
memcpy(newP, pStructure, sizeof(int)*oldsize);
delete[] pStructure;
pStructure=newP;
}
mr.escape