首页 > 其他分享 >野指针

野指针

时间:2022-09-23 21:35:16浏览次数:46  
标签:p1 指向 int num NULL 指针

原文 https://homepea.top/2020/24.C-point/

空指针

空指针:指针指向的地址为空的指针叫空指针/NULL指针

int *p1;
p1 = NULL;

char *p2;
p2 = NULL;

野指针

当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指针便称悬垂指针(也叫迷途指针)。C++允许未初始化的指针的存在,而这类指针即为野指针。

int a = 1;
int *p1;		//这里p1没有初始化的赋值,随机只想一个地址,是野指针
p1 = &a;		//指向了值

// 指针在申请的时候一定要赋值,至少要给NULL!
char *p2 = NULL;

 

垂悬指针

悬垂指针:指针所指向的对象已经被释放或者回收了,但是指向该对象的指针没有作任何的修改,仍旧指向已经回收的内存地址。 此类指针称为垂悬指针。

一个很常见的失误是返回一个栈分配的局部变量:一旦调用的函数返回了,分配给这些变量的空间被回收,此时它们拥有的是“垃圾值”。

int *func(void)
{
    int num = 1234;
    /* ... */
    return #
}

调用 func 后,尝试从该指针暂时能读取到正确的值(1234),但是再次调用函数后将会重写栈为 num 分配的的值,再从该指针读取的值就不正确了。如果必须要返回一个指向 num 的指针,num 的作用域必须大于这个函数——它也许被声明为 static。

标签:p1,指向,int,num,NULL,指针
From: https://www.cnblogs.com/fuqiangblog/p/16724428.html

相关文章

  • cC语言第16天,声明器、函数指针与数组
    一、声明器提供标识符与类型信息,用于声明一个标识符的语法被称作声明器。1.声明数组B1.元素类型:int[10];2.数组名:B;3.元素个数:5按照公式,我们写出如下形式的声明:int[10]......
  • UEC++ 智能指针——共享指针、共享引用、弱指针
    C++中,往往令人头痛的是指针的管理问题!在对象动态构建时,我们需要将对象指针进行存储,一旦忘记释放,那么将会导致不可预估的错误。在C++中排查指针导致的内存泄漏问题实在令人......
  • 【C++入门】(六)高级引用和指针
    1.如何利用按引用传递来提高程序的效率1.1按引用传递以提高效率请看下面这段代码,体会精神classSimpleCat{public:SimpleCat();//构造函数......
  • 【C++入门】(三)创建指针
    1.指针是什么?1.1理解指针及其用途变量是可存储一个值的对象:整型变量存储一个数字;字符变量存储一个字母;指针是存储内存地址的变量计算机内存是存储变量......
  • 【C++入门】(四)开发高级指针
    1.如何在堆中创建对象?1.1在堆中创建对象定义了类型Cat后,便可声明一个指向这种对象的指针,并在堆中实例化一个Cat对象,就像在栈中实例化一样Cat*pCat=newCat;......
  • 22.this指针
    1.this指针工作原理我们知道,c++的数据和操作也是分开存储,并且每一个非内联成员函数(non-inlinememberfunction)只会诞生一份函数实例,也就是说多个同类型的对象会共用一块......
  • C语言第15天,指针与多维数组
    ##数组名的转换规则当数组名arr出现在一个表达式当中,数组名arr将会被转换为指向数组首元素的指针。但是,这个规则有两个例外:1.对数组名arr使用sizeof时。2.对数组名......
  • C++ void类型指针
    void  =>空类型void*=>空类型指针,只存储地址的值,丢失类型,无法访问,要访问其值,我们必须对这个指针做出正确的类型转换,然后再间接引用指针。所有其它类型的指针都可以......
  • 滑动窗口 & 双指针
    https://leetcode.cn/problems/longest-repeating-character-replacement/classSolution{public:intcharacterReplacement(strings,intk){if(s.emp......
  • 双指针
    1.滑动窗口2.双指针例题11.盛最多水的容器解法一:双指针$$S=H \timesW=min(left_height,right_height)\times(right-left)$$用left和right两个指针从两端向......