free 与 NULL的问题

zjf30366 2013-08-03 11:04:26
发现一个问题,现在想对一个指针free,并且置NULL,但是通过函数调用释放后,并不为NULL,这是什么情况,该如何解决呢?

#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;
}
...全文
248 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
max_min_ 2013-08-03
  • 打赏
  • 举报
回复


注意指针本身的地址和指针的指针的地址关系

你的_free_P函数 虽然也是传的是地址, 但是地址也是一个值,
它只能保证对它地址的内容修改有效,不能保证对它的地址地址本身有效的,
它的本身也是拷贝一份地址的值给到函数接口的!

好好理解下

tsakang 2013-08-03
  • 打赏
  • 举报
回复
函数传参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;
} 
qzf362269994 2013-08-03
  • 打赏
  • 举报
回复
ptr只是释放了addr所指向的内存空间,并指向NULL 它不能修改addr所指向的地址啊
大尾巴猫 2013-08-03
  • 打赏
  • 举报
回复
要修改指针本身,函数的参数要用指针的指针

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧