[英]does the enum hack work in C? If so, is it supposed to work in VisualStudio 2003?
[英]I'm sure this is not supposed to work but it does
此函數用於在動態數組上重新分配一些內存。 我有lot
struct lottery
。 我通過引用傳遞結構數組( 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;
}
b = realloc(*a, X)
釋放與*a
關聯的內存,並分配存儲在b
的大小為X
的新分配。
現在,當您執行*a = b
, *a
和b
引用此新分配。
在free(b)
,釋放該分配,並且b
和*a
變為無效指針。 此時, return *a
具有未定義的行為。
如果您不釋放b
,那么一切都很好。 您不會泄漏內存,因為您仍然有指向它的指針:通過*a
(在調用方中引用一個變量)和函數的返回值。
(另外,不要realloc()
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.