2013-05-22 2 views
5

Ich versuche, die Größe eines Arrays dynamisch zu erhöhen. Gibt es eine C- oder C++ - Standardfunktion, die zusätzlichen Platz am Ende eines Arrays hinzufügt oder entfernt? Ich weiß, das ist schwierig, da nicht sichergestellt werden kann, dass am Ende genug Platz auf dem Heap ist. Aber sollte das nicht die Aufgabe eines Betriebssystems sein?Größe des Arrays dynamisch vergrößern/verkleinern

+1

['void * realloc (void * ptr, size_t size);'] (http://www.cplusplus.com/reference/cstdlib/realloc/) Funktion in C –

+2

Sie müssen sich entscheiden In welcher Sprache programmieren Sie? In C würden Sie 'realloc' verwenden. In C++ würden Sie 'std :: vector' verwenden. –

Antwort

5

Die Funktion, die Sie suchen ist realloc() in C, die auch in dem C++ STL als std::realloc

Obwohl vorhanden ist, wie Sie erwähnten C++, können Sie auch für einen Standard-Container wie std::vector, die die zugehörigen kapseln gehen könnten Speicherverwaltung.

+0

es ist nicht Größe zu verlieren, tut es **? ** –

+0

gut, es verringert sich, wenn ich eine kleinere Größe als ich zuvor hatte eingeben. Oder ist das nicht möglich? –

+1

@GrijeshChauhan Sie können eine neue Größe unterhalb der alten Größe des Arrays angeben. Der C-Standard spezifiziert (7.20.3.4), dass 'realloc()' "das alte Objekt, auf das ptr verweist, rückgängig macht und einen Zeiger auf ein neues Objekt zurückgibt, das die durch die Größe angegebene Größe hat" und dass der Inhalt des neuen Objekts das ist gleich bis min (oldSize, newSize). – JBL

0

Es gibt keine C-Funktionen als solche. Sie können für C++ Container gehen. Dies hat Arrays, Listen etc ...

0

wahrscheinlich können Sie dies erreichen, indem Sie Ihre eigene Speicherverwaltung Wrapper so eine Möglichkeit zum Anhängen/Freigeben von Speicher-Chunks aus zugeordneten Array.

0

Nach vielen Experimenten von Leuten wie Professoren und Ingenieuren (die über einige Jahre hinweg echte Jobs haben), wenn Sie ein Array erweitern, erweitern Sie es um 50%, es sei denn, Sie haben Insider-Informationen, die Ihnen etwas anderes sagen. realloc() erledigt das ganze schweres Heben für Sie auch (wird als nächstes erklärt). Aus dem Internet: -> Die realloc() Funktion ändert die Größe des Speicherblocks, auf den ptr zeigt, auf Größe Bytes. Der Inhalt wird im Bereich vom Anfang der Region bis zum Minimum der alten und neuen Größen unverändert bleiben. Wenn die neue Größe größer als die alte Größe ist, wird der hinzugefügte Speicher nicht initialisiert. Wenn ptr NULL ist, entspricht der Aufruf malloc (size) für alle Werte der Größe. Wenn die Größe gleich null ist und ptr nicht NULL ist, entspricht der Aufruf dem Wert free (ptr). Wenn ptr NULL ist, muss es von einem früheren Aufruf von malloc(), calloc() oder realloc() zurückgegeben worden sein. Wenn der Bereich, auf den gezeigt wird, bewegt wurde, wird ein freier (ptr) ausgeführt.