2014-06-23 96 views
1

在下面的代碼末尾,我需要將哪個指針插入free(),array或temp_array?無論哪一個或將釋放內存塊是否有關係?指向指向內存塊的指針的指針,應該釋放哪個指針?

int *array = 0; 
int *temp_array = 0; 
int count = 0; 

array = malloc(sizeof(int)); 

// skipping code where count is calculated... 

temp_array = realloc(array, count * sizeof(int)); 

if (temp_array == NULL) { 
    free(array); 
    // some error message 
    return; 
} 
array = temp_array; 

// skipping section of code, which reads numbers from a file and loads them into an array 
// amount of numbers read can be 0 to whatever 

free (array); // free array or temp_array? 

此外,是否有可能分配的內存塊與realloc的,如果它試圖爲分配內存的指針爲NULL(換句話說,我是否需要使用malloc第一分配內存,後來與調整其大小realloc,還是我可以跳過malloc)?

回答

0

沒關係 - temp_arrayarray都指向同一個內存塊。我寧願temp_array那麼realloc和自由指針匹配。根據您的工作代碼,爲了保護,您可以考慮將兩個指針都指定爲NULL,以防止兩次釋放內存。 free(NULL)是安全的 - 不執行任何操作。

關於一個整數的初始分配 - 是否有必要?從顯示的代碼中,定義在棧上的int將是更可取的。

編輯: 後從OP(在評論)的詳細信息看起來可以用其保持的文件中的記錄的數量的報頭值被簡化的代碼。這消除了realloc的需要,並允許在讀取文件值之前分配內存。

+0

我不確定是否我寫它是最好的方式,但代碼來自一個函數,它讀取文件中的整數並加載它們成陣列。無論如何,整數的數量可以是0。我在for循環外執行了malloc,循環遍歷文件中的數字,並在for循環中使用realloc來增加數組的大小。我不確定是否可以在NULL指針上分配內存,所以這就是爲什麼我先調用malloc的原因。如果指針爲NULL,是否可以使用realloc分配內存?即ptr = realloc(NULL,count * sizeof(int)); – Maya

+0

好的。我會在包含記錄數的文件中創建一個標題。然後函數首先讀取頭int,分配足夠的內存然後讀取所有的值。 – suspectus

+0

好主意!沒有想到這一點。 – Maya