失效指针指向一个已删除的对象内存区域的指针。
(可以通俗理解为这个指针你不知道他指向什么)。下面我们用两个简单的例子来说明一下:
第一个例子:
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的时候,系