0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

指针被释放后就变成了空指针吗

学益得智能硬件 来源:学益得智能硬件 2025-01-22 09:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

指针被释放后,是不是就变成了空指针?有好多同学提出了这样的问题。

借用《C专家编程》上面的一段代码,可以很好的解释这个问题。

#include 


int main()
{
    char *s = (char *)malloc(128);


    strcpy(s, "helloworld");


free(s);


    if (s != NULL)
        strcpy(s, "12345");


    return 0;
}

这段代码大家看下有没有问题,能不能顺利运行?

前面三行都没有问题,指针 s 指向了一块堆内存,把字符串 helloworld 拷贝到堆内存中,然后释放了 s。

问题就出在这,很多同学不理解,指针 s 被释放了,是不是就变成了空指针?

如果变成了空指针,那下面的判断就不会成立,也就不会执行拷贝操作。

其实这样的理解是有问题的。

指针 s 指向了堆内存,free(s) 准确的讲,是把 s 指向的内存释放掉,这个操作对 s 本身并没有影响,s 里面保存的还是原来那块内存的地址,并不是空。

所以下面的判断语句成立,继续执行拷贝操作。

由于 s 指向的内存已经被释放掉,强行往里面拷贝,就会出现意想不到的错误。

养成良好的编程习惯就是指针被释放掉后,手动把它变成空,空指针比野指针、悬空指针更可控。

指针是C语言的精髓,如果你还是觉得模棱两可,不妨看下这套播放量近 20 万的指针教程,课程以及资料全部开源,看完后一定会让你的指针水平达到一个更高的级别。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指针
    +关注

    关注

    1

    文章

    484

    浏览量

    71689
  • 代码
    +关注

    关注

    30

    文章

    4945

    浏览量

    73212

原文标题:指针被释放后,是不是变成了空指针

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    函数指针指针函数的区别

    = fun(a);   注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有括号()包含,如果
    发表于 12-12 06:34

    函数指针的概念

    函数指针是指向函数的指针变量。 通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。 函数指针可以像一般函数一样
    发表于 12-11 08:10

    如何用函数指针调用函数

    给大家举一个例子: int Func(int x);/*声明一个函数*/ int (*p) (int x);/*定义一个函数指针*/ p = Func; /*将Func函数的首地址赋给指针变量
    发表于 12-11 06:26

    C指针的妙用分享

    1、你知道吗?指针其实是个天生的数学家!看这个: #include int main() { int arr[] = {10, 20, 30, 40, 50}; int *p = arr
    发表于 11-17 06:35

    堆栈指针SP介绍

    SP 堆栈指针:8位寄存器,用来指示堆栈的位置,可由软件修改。 堆栈的介绍堆栈是一种按“先进出”规律操作的存储结构。不同类型的处理器其堆栈的设计各不相同: SP寄存器作为堆栈指针。这种结构的特点是
    发表于 11-17 06:07

    rt_tick_increase 引用指针变量未判断其是否为

    指针变量使用之前没有判断是否为,万一rt_system_scheduler_start此函数调用之前来滴答定时器的中断了,这样操作是不是会有风险
    发表于 10-09 08:07

    函数指针的六个常见应用场景

    函数指针在嵌入式开发中有着广泛的应用,它让代码更加灵活,减少冗余,提高可扩展性。很多时候,我们需要根据不同的情况动态调用不同的函数,而函数指针正是实现这一需求的重要工具。本文将介绍六个常见的函数指针
    的头像 发表于 04-07 11:58 1149次阅读
    函数<b class='flag-5'>指针</b>的六个常见应用场景

    RTOS中的本地存储指针使用

    本地存储指针是RTOS中的一个重要特性,增强了任务管理和数据处理能力。在RTOS上下文中,本地存储是指存储在本地的特定任务或对象的数据。通常与任务本地存储(Task Local Storage,TLS)有关,其中数据存储在任务控制块(TCB)中,允许每个任务具有私有的、特定于任务的变量。
    的头像 发表于 02-28 16:33 1183次阅读
    RTOS中的本地存储<b class='flag-5'>指针</b>使用

    指针式万用表的正确使用

    指针式万用表可以测量交/直流电压、交/直流电流、直流电阻、晶体管直流电流放大系数、晶体管反向截止电流、负载电流、负载电压等。 一、直流电压测量 将功能开关置于“+DC”位置,量程开关选放在接近
    的头像 发表于 02-13 14:00 2356次阅读

    指针式万用表测量电压技巧

    在电子维修和电气工程领域,准确测量电压是至关重要的。指针式万用表因其直观的读数和可靠性而广受欢迎。 1. 了解指针式万用表 在开始测量之前,了解万用表的基本构造和功能是必要的。指针式万用表通常有两个
    的头像 发表于 01-23 09:32 2627次阅读

    指针式万用表与数字万用表对比

    在电子维修和测试领域,万用表是不可或缺的工具。它们能够测量电压、电流、电阻等多种电气参数。市场上主要有两种类型的万用表:指针式万用表和数字万用表。 指针式万用表 工作原理 指针式万用表,也称为模拟
    的头像 发表于 01-23 09:31 4157次阅读

    指针式万用表功能介绍

    在电子工程和电气维修领域,万用表是不可或缺的工具之一。它能够快速测量电路中的电压、电流和电阻等参数,帮助工程师和技术人员诊断和修复电路问题。 指针式万用表的基本原理 指针式万用表的工作原理
    的头像 发表于 01-23 09:12 4091次阅读

    指针式万用表读数技巧

    1. 了解指针式万用表的基本构造 在使用指针式万用表之前,了解其基本构造是非常重要的。指针式万用表主要由表头、量程选择旋钮、插孔和表盘组成。表头是测量的核心部分,它通过指针的偏转来显示
    的头像 发表于 01-22 18:20 2799次阅读

    指针式万用表使用指南

    一、指针式万用表简介 指针式万用表是一种传统的电子测量工具,因其表头指针的摆动来显示测量结果而得名。与数字万用表相比,指针式万用表在某些情况下能提供更直观的读数,尤其是在测量快速变化的
    的头像 发表于 01-22 17:25 3335次阅读

    指针式万用表测量精度比较

    指针式万用表的核心是一个可变电阻器(分压器)和一个可动的指针。当测量电压或电流时,通过分压器的电阻值会改变,从而改变通过指针的电流,使指针在刻度盘上移动。
    的头像 发表于 01-22 17:23 2448次阅读