2012-03-03 101 views
0

我試圖增加一個靜態數組,通過在另一個數組中動態加倍它,只要它是最大的。我計劃創建與malloc()新陣列,然後複製值。完成後,我計劃刪除第一個數組,然後將第一個指針指向第二個數組?如何更改動態調整大小的數組的指針?

float FirstArray[1]; 

if (first array is full) { 
    float *TempArray = (float*) malloc (sizeof (float) * counter); 
    for (loop) { 
     TempArray[i] = FirstArray[i]; 
    } 
    //I'm not sure how to point the static array to the dynamic one 
    free(FirstArray); 
    *FirstArray = &TempArray; 
//i get this error with line above 
//assignment makes integer from pointer without a cast 
}  
+0

沒關係,但FirstArray也需要在初始時動態分配。 – 2012-03-03 23:13:32

+0

'realloc'是你的朋友。 – 2012-03-03 23:23:34

回答

1

FirstArray需要動態分配,以及:

int counter = 1; 
float *FirstArray = (float *)malloc(sizeof(float)*counter); 

if (first array is full) { 
float *TempArray = (float*) malloc (sizeof (float) * counter); 
for (loop) { 
TempArray[i] = FirstArray[i]; 
} 
free(FirstArray); 
FirstArray = TempArray; 
4

也許你應該考慮realloc,因爲這正是它存在的原因。

0

靜態數組分配是自動管理:您不需要(也不應該)分配它,所以你不應該釋放它。您無法分配float * (pointer) to float[N]N-elem靜態數組),因爲編譯器將這些類型視爲不兼容的類型。 (靜態數組在初始化時也被置零以提供一個差異。)

因此基本上有兩種選擇:忘記名稱FirstArray,以新名稱(SecondArray?)保留其內容。廢話..其他方式是從一開始就有動態數組。

uint size = 4096; 
double * array = (double *) malloc(sizeof(double) * size); 

然後複製可能是不必要的,所以使用realloc理查德和奧利弗指出。

size <<= 1; /* double size */ 
array = (double *) realloc((void *) array, sizeof(double) * size); 

請注意,realloc的輸入和輸出指針可能不同。如果沒有,則複製不會被保留。