author:张继飞

写在前面,前面写了代码封装free函数,但是调用封装并退出后,指针并不为NULL,导致接下来以此作为判断条件的时候就出现问题了。先前封装函数为void _free_p_(void *ptr),通过分析,指针作为函数参数传递时只是传递了指针所指向的地址,将其赋给一个临时变量,修改的也是该地址的的内容,但是指针本身并没有修改,置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("erro\n");
    return 0;
}

指针作为函数参数 进行内存释放 并置NULL相关推荐

  1. 指针用作函数参数、指针型函数和函数指针

    指针用作函数参数 以前我们学过的函数参数要么是基本数据类型的变量,要么是类的对象,又或者是数组名,前几讲学到的指针同样可以用作函数参数. 指针作函数形参时,我们调用此函数将实参值传递给形参后,实参和形 ...

  2. 双重指针作为函数参数的妙用

    双重指针作为函数参数,可以在函数函数内部修改外部指针的值.主要用法包括: 1. 在函数内部分配内存,作为函数参数返回: 2. 在函数内部设置指针为空: #include <stdio.h> ...

  3. 【C 语言】指针间接赋值 ( 指针作为 函数参数 的意义 | 间接赋值 代码示例 )

    文章目录 一.指针作为 函数参数 ( 间接赋值 ) 的意义 二.间接赋值 代码示例 一.指针作为 函数参数 ( 间接赋值 ) 的意义 调用函数时 , 调用 & 取地址 生成 实参 p , 将 ...

  4. 【C 语言】结构体 ( 结构体作为函数参数 | 结构体指针作为函数参数 )

    文章目录 一.结构体作为函数参数 二.结构体指针作为函数参数 三.完整代码示例 一.结构体作为函数参数 结构体变量 作为函数形参 , 在函数中 , 只能访问 该函数形参 , 无法修改 结构体内存 的值 ...

  5. 函数指针做函数参数 使用总结及其意义

    目录 1.函数指针 2.函数指针做函数参数 3.函数指针做函数参数在实际项目中的运用. 第一种 正向调用 第一步 Load DLL 第二步 声明函数指针类型 第三步 实现函数的调用. 完整代码如下: ...

  6. C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态

    1,数组指针语法梳理 回顾,如何定义数组数据类型: 回顾,如何定义指针类型数组: 回顾,如何直接定义 一个指向数组类型的指针: 2,函数指针语法梳理 1)如何定义一个函数类型 2)如何定义一个函数指针 ...

  7. C++老话题:用指向函数的指针作函数参数

    用指向函数的指针作函数参数 在C语言中,函数指针变量常见的用途之一是作为函数的参数,将函数名传给其他函数的形参.这样就可以在调用一个函数的过程中根据给定的不同实参调用不同的函数. 例如,利用这种方法可 ...

  8. this指针作为函数参数_C++以指针作为函数参数(学习笔记:第6章 10)

    以指针作为函数参数[1] 为什么需要用指针做参数? 需要数据双向传递时(引用也可以达到此效果) 用指针作为函数的参数,可以使被调函数通过形参指针存取主调函数中实参指针指向的数据,实现数据的双向传递.( ...

  9. C语言中的void和void指针-void*,及void指针做函数参数。

    实例: #include <stdio.h> #include <stdlib.h> void print(void * node) {     printf("%d ...

最新文章

  1. Hadoop 2.0(YARN/HDFS)学习资料汇总
  2. HarmonyOS之深入解析线程间的通信
  3. jquery.datepair日期时分秒选择器
  4. 兵马未至,数据先行,且看如何进行数据挖掘!
  5. C++入门经典-例2.13-左移运算
  6. 【C++基础】STL迭代器
  7. $.getJSON()
  8. CVS/SVN/GIT
  9. onload、DOMContentLoaded、$(document).ready(fn)、$(document).load(fn)
  10. if....else的基本用法
  11. Python爬虫之(六)requests库的用法
  12. 用python实现2048小游戏
  13. 密码学算法之 SM2国密算法
  14. VCC、VDD、VSS等是什么意思
  15. 十万,百万,千万,快狗打车架构是怎么演进的?
  16. ios 应用闪退原因
  17. 如何在wince下添加和删除驱动(作者:wogoyixikexie@gliet)
  18. oop 编程是什么?
  19. nc文件的读取与可视化-python
  20. 引用类型属性自动注入-byName,byType,多个配置文件

热门文章

  1. Android 系统性能优化(39)---Android内存优化之三:打开MAT中的Bitmap原图
  2. 硬件基础知识(11)---交变电压下的电容特性
  3. 人生在世,运气很重要
  4. 【机器人】人类反应与机器的浑然一体—营救机器人诞生
  5. 自然语言处理项目之文档主题分类
  6. 城池俱坏,英雄安在?云龙几度相交代?想兴衰,^
  7. tensor backward_Pytorch中的backward函数
  8. 荣耀MagicV今晚亮相:刷新对传统折叠屏厚重的认知
  9. 滴滴否认柳青计划卸任:目前正积极全面配合网络安全审查
  10. 受半导体短缺及疫情影响,丰田已下调9月10月及当前财年产量预期