C 中的 malloc 和 free
malloc and free in C
如果我有类似的东西
struct Node *root;
struct Node *q;
root = malloc( sizeof(struct Node));
q = root;
free(q);
q指向的节点被释放了吗??还是我必须将 root
传递给 free
函数?
root
和q
的值相同,也就是说指向同一个内存位置。在调用 free(q)
之后,它们都是悬挂指针,因为它们指向的东西都已被释放,但它们仍然指向那个位置。
取消引用任何一个都会调用未定义的行为。这包括对其中任何一个调用 free
。
调用 free(q)
后,释放的内存不会以任何方式被清除或擦除。
q
和 root
仍然指向已分配的内存位置,但该内存位置已添加到可用内存块列表中,并且可以重新分配。您不得通过这些指针中的任何一个引用该内存位置,否则它将调用未定义的行为。
在 free
之后调用 q
和 root
指向释放的内存块。
一般情况下,每个资源只需要释放一次。这与 C++ 不同,在 C++ 中您可以实现(但可能不应该)相当复杂的资源管理逻辑。
指针q
和root
赋值后指向同一块内存。所以对 free
的调用将释放该块,并且 q
和 root
都悬而未决。
你可以写
free(q);
或
free(root);
自
以来可互换
q == root
如果我有类似的东西
struct Node *root;
struct Node *q;
root = malloc( sizeof(struct Node));
q = root;
free(q);
q指向的节点被释放了吗??还是我必须将 root
传递给 free
函数?
root
和q
的值相同,也就是说指向同一个内存位置。在调用 free(q)
之后,它们都是悬挂指针,因为它们指向的东西都已被释放,但它们仍然指向那个位置。
取消引用任何一个都会调用未定义的行为。这包括对其中任何一个调用 free
。
调用 free(q)
后,释放的内存不会以任何方式被清除或擦除。
q
和 root
仍然指向已分配的内存位置,但该内存位置已添加到可用内存块列表中,并且可以重新分配。您不得通过这些指针中的任何一个引用该内存位置,否则它将调用未定义的行为。
在 free
之后调用 q
和 root
指向释放的内存块。
一般情况下,每个资源只需要释放一次。这与 C++ 不同,在 C++ 中您可以实现(但可能不应该)相当复杂的资源管理逻辑。
指针q
和root
赋值后指向同一块内存。所以对 free
的调用将释放该块,并且 q
和 root
都悬而未决。
你可以写
free(q);
或
free(root);
自
以来可互换q == root