簡體   English   中英

釋放指向包含數組的結構的指針

[英]Freeing a pointer to structure containing an array

我有一些問題,可能是由於對“免費”功能的工作方式有誤解。 基本上我已經定義了這樣的結構

typedef char parola[11]
typedef struct _node node
struct _node
{
  parola wrd;
  node *padre;
  node *Ts;
  node *Td;
};

稍后在代碼中,我使用malloc為節點分配內存:

node *r
r = (node *) malloc(sizeof(node));

我以這種方式創建了二進制搜索樹,為每個節點分配內存。 當我嘗試刪除bst中的節點時,我將指針傳遞給該節點* n。 我認為我需要遞歸程序,但是在涉及到指向節點的指針上使用free()時,這似乎不起作用。 我確信這是因為,如果我嘗試在節點中打印“ parola”,則實際上它會在取消分配內存后打印其中包含的單詞。

node *n

.../*in another function*/

free (n)

printf("%s\n",n->wrd)
/*This does print the word inside the node after the deallocation*/

我在這里想念什么? 我需要以其他方式使用free()嗎?

謝謝你的幫助。

在C語言中, free不會擦除數據。 它只是說:“我不再使用它;您可以將其用於其他用途。” 如果在那個時候沒有什么需要使用它,它將不會被覆蓋。

但是,您不能保證不會被覆蓋。 free d之后使用東西是一種讓程序突然在最壞的情況下意外失敗的絕佳方法。

(請確保在釋放(或釋放)它們的最后一個指針之前釋放了指向的節點,並確保只釋放每件事一次!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM