【发布时间】:2017-07-27 13:01:37
【问题描述】:
我声明了以下结构:
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);
这段代码运行得很好。但是,我认为当你有一个带有指针成员的结构时,你应该free() 每个成员(除了指向结构的指针)。
所以在这里,我没有为root->data 使用malloc(因为我认为mallocing 结构可以做到这一点),但是它被初始化为输入值并且它的值被成功打印。当我尝试free(root->data) 时,我的程序崩溃了。
所以当我malloc root 时root->data 不是malloced?如果没有,我怎么还能使用它?
为什么会这样?我在这里想念什么?
【问题讨论】:
-
So root->data is not malloced when I malloc root? If not, how can I still use it?调用另一个 malloc 就可以了。 -
在释放指针指向的东西之前,最好确保它是您分配的东西。您是否分配了一些东西并将结构中的指针设置为指向它?
标签: c pointers malloc free dynamic-memory-allocation