這裏有一個例子:
#include <stdlib.h>
typedef struct auxiliarRegistre { ... } clients;
int arrSize = SOME_START_SIZE;
clients *arr = malloc(arrSize * sizeof *arr);
/**
* Do stuff with arr. When you need to extend the buffer, do the following:
*/
clients *tmp = realloc(clients, sizeof *arr * (arrSize * 2));
if (tmp)
{
arr = tmp;
arrSize *= 2;
}
每次你需要擴展它是一種常見的策略時將加倍緩衝區的大小;這往往會減少撥打realloc
的電話數量。它也可能導致嚴重的內部碎片;如果你有128個元素,並且你只需要再存儲,那麼你總共分配了256個元素。您還可以通過一個固定的量來延長,如
clients *tmp = realloc(clients, sizeof *arr * (arrSize + extent));
if (tmp)
{
arr = tmp;
arrSize += extent;
}
請注意,你不想要分配的realloc
直接到你的緩衝區的結果;如果由於錯誤而返回NULL,那麼您將失去對已分配內存的引用,導致內存泄漏。此外,您不想更新您的數組大小,直到您知道調用成功爲止。
那'malloc'呼籲*一個*'client'結構分配空間。您可能還想閱讀['realloc'](http://en.cppreference.com/w/c/memory/realloc)。 –
這不可能是正確的做法,因爲你是鑄造的malloc()''的返回值,[這是錯誤的(http://stackoverflow.com/questions/605845/do-i-cast-the-result -of-的malloc/605858#605858)。除此之外,你在尋找'realloc()'嗎? – 2013-10-28 13:31:25
同時還要注意,你不能使用'realloc()的'以[embiggen(http://en.wiktionary.org/wiki/embiggen)'PrimaryClients',因爲它不與'分配的malloc()'。 – Kninnug