我有一个2D的LinkedList我正在做一个结构:Ç - malloc的崩溃/堆损坏与指针
struct Node
{
void *data;
struct Node *up, *left, *right, *down;
};
因为我已经习惯了Java的,我做这假装是一个构造函数它看起来像:
struct Node* buildNode(void *data)
{
struct Node *node = malloc(sizeof(struct Node*)); // Program crashes here.
node->data = data;
node->up = NULL;
node->left = NULL;
node->right = NULL;
node->down = NULL;
return node;
}
我的程序崩溃当它到达第二段malloc
线。如果我从malloc(sizeof(struct Node*))
中删除*
,它不会崩溃并正常工作。
这是为什么?我的buildNode
函数只是返回指向Node
的指针,实际上并不返回Node
结构本身。我得到的错误与损坏的堆有关,由于我对C有点新,所以我不明白这是什么意思。
谢谢!
经过大量的学习,我学到了很多关于C的知识,并且我被告知的一件事是您最后的陈述“或者内存不会在程序终止之前发布”。不一定是这样。你能详细说明吗?我看到很多地方说,当程序退出时,你的应用程序占用的空间被释放,不管你是否忘记了。 – Hatefiend
这是正确的。内存不会被释放*直到程序终止*,当OS清理整个过程时。我想你说的和我完全一样。 – Baldrick
哦,对不起,我读'内存将不会被释放,直到'内存将不会被释放' – Hatefiend