2013-05-22 164 views
5

我想動態增加數組的大小。是否有任何標準的C或C++函數,它在數組的末尾添加額外的空間或將其刪除? 我知道,這很難,因爲它不能保證在堆的最後有足夠的空間。但是,這不應該是操作系統的工作嗎?動態增加/減少數組大小

+1

['void * realloc(void * ptr,size_t size);'](http://www.cplusplus.com/reference/cstdlib/realloc/)在C中的功能 –

+2

您需要下定決心你在用什麼語言進行編程。在C中,你會使用'realloc'。在C++中,你會使用'std :: vector'。 –

回答

5

你要找的功能是在C,這也是目前在C++ STL爲std::realloc

雖然你提到C++ realloc(),你也可以去像std::vector一個標準的容器,它封裝了相關內存管理。

+0

它不會減小尺寸,是嗎?** –

+0

好吧,如果我輸入比以前更小的尺寸,它確實會減少。或者這是不可能的? –

+1

@GrijeshChauhan您可以指定一個小於數組的舊大小的新大小。 C標準規定(7.20.3.4)'realloc()'「重新分配由ptr指向的舊對象,並返回一個指向size爲size指定大小的新對象的指針,並且新對象的內容是一直到min(oldSize,newSize)。 – JBL

0

這裏沒有C函數。你可以去C++容器。這有陣列,列表等...

0

可能你可以通過編寫你自己的內存管理包裝這樣的方式來實現這個從分配的數組追加/釋放內存塊的方式。

0

經過諸如教授和工程師(有幾年真實工作經驗的人)的大量實驗後,擴展數組時,除非你有內部信息告訴你不同,否則將其擴大50%。 realloc()爲你也做了所有重載(解釋見下)。從因特網: - > realloc()函數將ptr指向的內存塊的大小更改爲字節大小。內容在從區域開始到新舊尺寸的最小範圍內保持不變。如果新尺寸大於舊尺寸,則添加的內存不會被初始化。如果ptr爲NULL,則對於所有大小的值,調用等價於malloc(size);如果size等於零,並且ptr不爲NULL,那麼調用等價於free(ptr)。除非ptr爲NULL,否則它必須早先通過調用malloc(),calloc()或realloc()返回。如果指向的區域被移動,則完成一個空閒(ptr)。