1. 程式人生 > >C語言動態新增陣列元素

C語言動態新增陣列元素

有時候需要用陣列實現List功能,普通靜態陣列長度被固定無法動態控制陣列大小,要用動態陣列實現,動態陣列的宣告很簡單:

int len = 10;
int *array = (int*)malloc(sizeof(int)*len);

但陣列元素超過10個之後想再新增元素,直接這樣寫:
*(array+10) = x;
雖然也可以正常編譯執行,但這是個錯誤寫法,因為我們只為array分配了array[0]到array[9]的記憶體空間,array[10]是array[9]之後接著的4位元組記憶體空間,如果這個空間被其他程式或物件使用,這樣就會造成汙染,是一種不安全的行為。

正確的做法是用realloc()函式重新分配array的記憶體

int len = 10;
int *array = (int*)malloc(sizeof(int)*len);
len++;
int *array_old = array;
array = (int*)realloc(sizeof(int)*len);

/**
*如果地址改變,代表記憶體在另一個地方劃分了一個新的記憶體空間,
*要釋放舊的記憶體空間
*/
if(array_old != array)
    free(array_old);