关于失效指针

失效指针是指向已被删除或超出作用域的对象内存的指针。通过两个实例,文章解释了失效指针的概念:当块内作用域变量离开其作用域后,与之关联的指针变为失效,可能导致不可预知的读取结果。第二个例子展示了函数调用中栈帧的变化如何导致失效指针的行为变化。
摘要由CSDN通过智能技术生成

  失效指针指向一个已删除的对象内存区域的指针。 

(可以通俗理解为这个指针你不知道他指向什么)。下面我们用两个简单的例子来说明一下:

第一个例子:

int main()
{
 int a = 10;
 int *p = NULL;
 if (10 == a)
 {
  int x = 100;
  p = &x;
 }
 printf("%d\n", *p);
 return 0;
}

  在上述代码中我们把条件判断语句中的语句称为块内作用域,也就是说X只在花括号内有效,程序成从if语句中退出的时候x被释放,这时候p就成为失效或者失能指针。但是你执行程序之后发现程序依旧可以执行,且p的值打印出来有可能是100,原因是因为p所指向的区域被是释放或者不受控制之后,这个内存上原有的数据没有被覆盖。

第二个例子:

int* fun()
{
 int a = 100;
 return &a;
}
void add()
{
 int x = 0;
}
int main()
{
 int *p = NULL;
 p = fun();
 add();
 printf("%d\n", 8p);
 return 0;
}

  这段程序的打印结果是什么呢?100?结果是0,为什么是0呢?在你调动fun函数结束的时候,fun函数的栈帧被释放,第二次调用函数add的时候,系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值