我有我已經聲明瞭以下結構:ç釋放結構指針成員
typedef struct binTreeNode
{
void *data;
struct binTreeNode *left;
struct binTreeNode *right;
} myBinaryTreeNode;
在我main
功能,我試圖用一個指針叫root
該結構的一個實例。
myBinaryTreeNode *root = malloc(sizeof(myBinaryTreeNode));
printf("\nPlease insert root data: ");
int input;
scanf("%d", &input);
root->data = (void*)&input;
printInt(root->data);
free(root);
此代碼運行良好。但是,我認爲,當你有一個指向成員的結構時,你應該每個都有一個指針(除了指向結構的指針)。所以在這裏,我沒有malloc
爲root->data
(因爲我認爲malloc
結構是這樣做的),但它被初始化爲輸入值,並且它的值被打印成功。當我嘗試free(root->data)
我的程序崩潰。
所以root->data
是不是malloc
編輯當我malloc root
?如果不是,我還能如何使用它? 這是爲什麼發生?我在這裏錯過了什麼?
'所以root->數據不是malloced,當我malloc根?如果沒有,我還能如何使用它?'只需調用另一個malloc即可。 – Matt
在你釋放你有指針的東西之前,最好確保它是你分配的東西。你是否分配了一些東西,並在結構中設置指針來指向它? – StoryTeller