0
這是一個函數用於重新分配動態數組上的一些內存。我輸入了struct lottery
至lot
。我通過引用傳遞結構數組(a
)和我想要的新大小(n
)。我宣佈臨時陣列(b
),因此我可以重新分配到a
。我相信這不應該工作,但它確實是
我的問題是:我在堆上創建了一些字節b = realloc()
等,但如果我free(b)
之前,我退出該功能它不能正常工作。如果我再次調用它b == NULL
變成true
,但如果我刪除free(b)
它工作得很好,但我認爲這是不正確的事情,因爲我在堆上留下垃圾字節。有人可以向我解釋這個問題嗎?
lot *Enterd(lot **a, int n) {
lot *b = NULL;
b = (lot *)realloc(*a, n * sizeof(lot));
if (b == NULL) {
printf("Memory could not be allocated for the new input.\n");
return NULL;
}
*a = b;
free(b);
return *a;
}
謝謝湯姆·齊奇和melpomene.Why不應該我投它?在UNI我們瞭解到,realloc的返回一個void *,我們要拋棄它。 (?) – Edward
@愛德華不,'malloc'和'realloc'返回一個'void *',所以你*不必*施放它。一個'void *'指針可以隱式轉換爲任何對象指針類型。另一方面,鑄造可以隱藏問題:http://c-faq.com/malloc/mallocnocast.html – melpomene
我會問我的proffesor,但感謝您的反饋和幫助! – Edward