野指针的处理

C/C++——指针处理 在C++中,“指针”(dangling pointer)指的是指向已释放或无效内存的指针。使用智能指针(如 std::unique_ptr、std::shared_ptr std::weak_ptr)可以自动管理内存,避免指针的问题。如果后续创建对象或者程序执行结束后,会自动使用构造析构函数,合理分配释放指针内存。当释放掉分配的动态内存后,将指针设置为nullptr,防止后续意外再次使用该指针。析构函数:在析构函数中,释放动态分配的内存,并将指针置空。4、避免返回局部变量的地址。 阅读详情

野指针处理的三个要点:

  1. 定义指针时,把指针变量赋值为NULL
  2. 释放内存时,先判断指针变量是否为NULL
  3. 释放完毕后,把指针变量重新赋值为NULL
#include <stdio.h>
#include <stdlib.h>

void free_mem(char *p)
{
    if (p != NULL){
        free(p);
        p = NULL;       // 这里的p只是形参,把NULL赋给形参并不影响实参
                        // 所以当函数执行完后,实参pa的值并不为NULL
    }
}



int main(void)
{
    char *pa = NULL;

    pa = (char *)malloc(100);

    free_mem(pa);

    return 0;
}

如果最后在main函数里面调用两次free_mem,程序就会报错,因为此时pa不为NULL,执行free(pa)会释放掉一块已经释放了的内存

单链表的实现---指针处理 单链表学习笔记: 由于之前对数据结构比较抗拒,因此一直没有沉下心来学习。最近受到疫情影响,开始硬着头皮学习数据结构,现记录一下学习遇到的问题,供大家交流学习。 本人初步编写了一个单链表程序(主要功能为:创建-测长-输出结果-删除部分或全部内存),在删除过程中遇到一个问题----指针! 先给出本人编写的程序 主函数 int main() { node *First=NULL; First=cr... 阅读详情

相关推荐

OC中网络传输的时候对字节流的操作 & 对字节的处理 & 指针问题

//包头:42个字节,第一个字节【目前基本上没用到,无需理会】,第二个字节【表示session的长度】,3-6字节【内容的长度】,最后36字节【客户端发送请求时的标示,当服务端返回结果时,客户端用来表示是哪个请求的返回结果。就是一个GUID或UUID】     char first = target.isPrice;           //第1个字节,暂时没有用到     char

taylor的专栏 4970

指针理解处理

指针是个很强大的工具,可是正因为它太强大,所以要操作它不是件易事。操作不当造成的指针,甚至会引起系统死机等比较严重的后果。   如果程序定义了一个指针,就必须要立即让它指向一个我们设定的空间或者把它设为NULL,如果没有这么做,那么这个指针里的内容是不可预知的,即不知道 它指向内存中的哪个空间(即指针),它有可能指向的是一个空白的内存区域,可能指向的是已经受保护的区域,甚至可能指向系统的关键内

typhoonzb的专栏 2571

C指针处理

C指针的出现,以及详细的处理办法,很好的文档哦!

指针出现的三种情况

昨天面试被问到“你了解指针吗”,我的回答是“指针就是没有初始化的指针,这样的指针会随机指向一块内存,指针会对系统造成破坏(造成内存泄漏)”。面试官又问到,“为什么会有指针这个概念?”。我只是回答了”指针没有初始化就会变成指针“。 事实上指针出现的情况有三种: 1、指针变量未初始化 2、指针释放之后未置空 3、返回指向栈内存的指针 我们如何避免指针呢?做法如下: ①定义一个...

LAMYOO的博客 3093

指针产生原因、危害及解决方法

定义 指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变量的值是别的变量的地址,意味着指针指向了一个地址是不确定的变量,此时去解引用就是去访问了一个不确定的地址,所以结果是不可知的。 原因 指针主要是因为这些疏忽而出现的删除或申请访问受限内存区域的指针指针变量创建时未初始化 任何指针变量刚被创建时不会自动成为NULL指...

qq_44759710的博客 1285

指针出现原因解决方法

如上图的局部变量n随着函数test的创建而创建,随着函数test的消失而消失。所以当test函数的消失,n的地址也归还于系统。在代码编写的过程中,可能会出现指针指向的位置未知,从而出现程序错误,这种指针统一称作指针。既然指针会出现,那我们应该如何避免指针的产生。根据上面的问题,我们可以做出相应的解决方法。第三种指针变量不再使⽤时,及时置NULL,指针使⽤之前检查有效性。越界访问就是指针指向变量未定义的内存,例如下图的数组的越界访问。指针出现的原因,最为常见的是如下几种。第二种,指针的越界访问。

studyr05的博客 641

C++之指针

一文搞懂C++的指针是什么,有什么危害,该如何预防。

2301_81280642的博客 1415

初学C语言(内存、指针、预处理语句)

当C程序在运行时,系统会为这个程序分配一块运行内存而分配的这块内存会按照系统的内存布局进行区域划分,一般会有以下几大版块特点:函数的内存通常都是从栈区申请,因此函数内定义的变量也是栈内存的一般函数的内存会在函数调用结束后被释放,因此函数内的变量才被成为局部变量特点:无法直接定义堆内存的变量或函数,必须使用函数来申请堆内存且对内存的释放也要手动进行,因此堆内存也被称为动态内存所以堆内存不会因为函数结束而释放注意:因为堆内存只能申请,但内存是无法移动的,所以只能得到堆内存的地址也就是说堆内存的操作都是通过指针

m0_74194022的博客 1651

c++指针如何处理

指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,指针无法通过简单地判断是否为NULL避免,而只能通过养成良好的编程习惯来尽力减少,对指针进行操作很容易造成程序错误。

thankyvision 631

指针处理,空指针指针

首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了。假设 有语句 int a=10;那么编译器就在内存中开辟1个整型单元存放变量a,我们假设这个整型单元在内存中的地址是 0x1000;那么内存0x1000单元中存放了数据10,每次我们访问a的时候,实际上都是访问的0x1000单元中的10.现在定义:int *p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs...

yingmuliuchuan的博客 735

C++ 指针处理示例

C++ 指针处理示例

u011109761的专栏 934

C语言进阶之路(三)----指针的产生原因及解决办法

1.会产生指针的做法 #include <stdio.h> //这就是一种错误的写法 int main(){ int *p = NULL; p = (int *)malloc(4); //释放P所指向的内存空间,但指针变量p仍然留在栈中,成为了指针 if (p != NULL){ free(p); ...

weixin_34021089的博客 517

嵌入式面试八股文(三)·指针产生原因解决方法、指针函数函数指针的区别

指针函数本质是一个函数,其返回值为指针。函数指针本质是一个指针,其指向一个函数。

时光の尘的博客 1575

C语言中的指针

指针变量指向⼀块区域的时候,我们可以通过指针访问该区域,后期不再使⽤这个指针访问空间的 时候,我们可以把该指针置为NULL。因为约定俗成的⼀个规则就是:只要是NULL指针就不去访问, 同时使⽤指针之前可以判断指针是否为NULL。上方代码看似对指针p赋予了n的地址,其实是不对的。是C语言中定义的一个标识符常量,值是0,0也是一个地址,但是这个地址是无法使用的,读写该地址就会报错。这样会导致该指针的地址是随机值,所以说p是随机值。概念:指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)

2403_87968122的博客 400

C语言 指针

指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的。当指针指向的范围超过了数组arr的范围时,指针就变成了指针。(四) 指针越界访问。

2301_76445610的博客 2811

C语言--指针形成的原因及解决办法

指针 1.关于指针 1.指针是指向垃圾内存的指针,而不是NULL;或者说是指向未知内存的指针, 2.指针形成的原因 1.指针P被free掉了,却没有将其置为NULL。free函数只是将指针所指向的内存释放掉了,使得内存成为自由内存,但是并没有把指针本身的内容清除掉,所以指针仍指向已经释放的动态内存。这是很危险的。 2.没有及时初始化指针。 3.指针操作超越了变量的作用域范围...

wit_732的博客 1130

CC++中的指针问题

文章目录1 CC++中的指针问题1.1 指针的概念1.2 指针的由来1.3 杜绝指针的基本原则2 CC++中的常见内存错误2.1 常见内存错误2.2 内存操作的基本规则 1 CC++中的指针问题 1.1 指针的概念 指针的概念: 指针变量中的值是非法的内存地址,进而形成指针指针不是NULL指针,是指向不可用内存地址的指针。 NULL指针并无危害,很好判断,也很好调试。...

木子皿--啥都不会的菜鸟 1290
上一篇: 多维数组做函数参数问题
下一篇: 结构体基础
红莲之殇
博客等级 码龄16年 30粉丝 39原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值