[英]possible memory leak using pointers with malloc() and free(), and confusion with pointer notation
因此,我對C還是比較陌生,我正嘗試為單鏈表編寫代碼。
這就是我為從列表開頭刪除節點而寫的內容。
int delete(struct node **head)
{
int x = -1;
if(*head != NULL) {
struct node *old = *head;
(*head) = (*head)->next;
x = old->data;
free(old);
}
return x;
}
我對free()
函數感到困惑。 我是將分配給指針的空間釋放為old
還是將其釋放為old
點的地址? 也許正確的做法是free(*old)
? 此代碼會導致內存泄漏嗎?
另外,如果這釋放了分配給old的內存,那么free(&old)
的結果將是什么?
從您顯示的內容來看,內存管理似乎還可以,並且似乎不會泄漏內存。
我要釋放分配給指針的空間嗎?
是的,代碼將釋放old
點,將old
點釋放到內存中,這通常稱為將內存分配給指針 。
free(*old)
不起作用,因為它無法編譯,因為您試圖將struct
傳遞到期望指針的位置。
free(&old)
不起作用,因為它會引發未定義的行為,因為代碼試圖釋放分配在堆棧上的內存,也就是指針變量old
本身的內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.