c语言 - 为什么 malloc 没有解除分配?


#include <stdio.h>
#include <stdlib.h>
typedef struct node{
    struct node *pre;
    struct node *next;
    int data;
}NODE; //struct declaration
int main(){
    NODE *new_node=(NODE*)malloc(sizeof(NODE)); //memory allocation
    printf("nnew_node addr: %dn",new_node);
    free(new_node); //deallocation
    printf("new_node addr: %dn",new_node);

}

结果:

new_node addr: 2097152
new_node addr: 2097152
Program ended with exit code: 0

为什么结果是一样的?
我解除分配new_node的内存。但new_node有地址。
为什么??

调用free会解除分配指针指向的内存,但不会更改存储在该指针中的内存地址。调用 free 后,不应尝试使用内存。为了安全起见,您可以手动将指针设置为 NULL:

free(new_node);
new_node = NULL;

卖掉了你的房子,它被拆除了,但你仍然把地址写在一张纸上。

free()不会

更改传递给它的指针的值。它只是释放在该指针上分配的内存。换句话说,指针仍然指向同一个地方,只是不再保证那里有任何东西。

如果需要检测指针是否已释放,请将其分配给NULL

new_node = NULL;

您甚至可以编写一个小宏来始终为您执行此操作(尽管我不建议这样做,因为它会使您的代码更难阅读(:

#define FREE_SET_NULL(pointer) free(pointer);pointer=NULL;

相关内容

  • 没有找到相关文章

最新更新