[英]Free array of function pointers
如果靜態分配了函數指針數組,我是否還需要free()
? 可以說我有以下代碼:
typedef void (*test_ptr)(void);
int main(void)
{
test_ptr test[3];
test[0] = a;
test[1] = b;
test[2] = c;
}
因此,當我完成該操作后,是否需要釋放所有指針,也許像這樣:
for(int i = 0; i < 3; i++) {
free(test[i]);
}
還是像其他數組一樣在函數結束時自動取消分配?
絕對不!
這樣分配的數組位於堆棧上,如果您嘗試使用free
,則free
將會嚴重失敗。
順便說一句,您顯示的數組不是 “靜態”的。 我認為您的意思是“本地”,甚至“自動”(盡管可以與C ++概念混淆)。
除了沒有 2:在堆棧上分配意味着您不應以這種方式分配大數組 。 堆棧通常具有有限的容量,因此任何大的都應通過malloc
分配。
因此,當我完成該操作后,是否必須釋放所有指針
不可以。因為只有當malloc
系列函數中的任何一個指針先前返回了指針ptr
時,才使用free(ptr)
。
free
一個指向任何其他對象(如變量或數組元素)的指針會導致未定義的行為 。
[...]如果
ptr
是空指針,則不會發生任何操作。 否則,如果參數與內存管理函數先前返回的指針不匹配,或者如果通過調用free
或realloc
釋放了空間,則該行為是undefined 。
還是像其他數組一樣在函數結束時自動取消分配?
是。 一旦其封閉函數返回,它將不再存在。
自動局部變量(如您所用的局部變量)將在創建它們的函數結束后立即銷毀。 就您而言,它們將在main()
函數結束時被銷毀。
因此,您不必顯式地free()
這些變量。
該代碼是否擁有指向對象的代碼,並且被分配了與free
( malloc
realloc
calloc
)相對應的分配函數之一?
如果是這樣,請在最后free
它。
如果沒有,請停止。
您顯然在第二種情況下...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.