free 与 NULL的问题
发现一个问题,现在想对一个指针free,并且置NULL,但是通过函数调用释放后,并不为NULL,这是什么情况,该如何解决呢?
C
#include<stdio.h>
#include<stdlib.h>
void _free_p_(void *ptr)
{
if (ptr == NULL)
return;
free(ptr);
ptr = NULL;
}
int main(void)
{
char *addr;
addr = (char*)malloc(10*sizeof(char));
strcpy(addr ,"test");
printf("addr = %s\n",addr);
_free_p_(addr);
if(addr == NULL)
printf("ok\n");
else
printf("vbvvvvvvvvvvvv\n");
return 0;
}
[解决办法]
要修改指针本身,函数的参数要用指针的指针
[解决办法]
ptr只是释放了addr所指向的内存空间,并指向NULL
它不能修改addr所指向的地址啊
[解决办法]
函数传参free的话要用二级指针!,代码如下:
#include<stdio.h>
#include<stdlib.h>
void _free_p_(void **ptr)
{
if (*ptr == NULL)
return;
free(*ptr);
*ptr = NULL;
}
int main(void)
{
char *addr;
addr = (char*)malloc(10*sizeof(char));
strcpy(addr ,"test");
printf("addr = %s\n",addr);
_free_p_(&addr);
if(addr == NULL)
printf("ok\n");
else
printf("vbvvvvvvvvvvvv\n");
return 0;
}