为什么不释放 malloc?
Why malloc isn't deallocated?
#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: %d\n",new_node);
free(new_node); //deallocation
printf("new_node addr: %d\n",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;
#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: %d\n",new_node);
free(new_node); //deallocation
printf("new_node addr: %d\n",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;