迷途指针,从百度百科上摘抄的,语言很幽默
2012-04-04 16:09
239 查看
迷途(stray)指针,也被称为野(wild)指针或悬浮(dangling)指针,是指将delete 用于指针(从而释放它指向的内存),但没有将它设置为空时引发。如果随后你在没有重新赋值的情况下使用该指针,后果将是不可预料的:程序崩溃算你走运。
这个程序故意创建了一个迷途指针:
typedef unsigned short int USHORT;
#include <iostream>
int main ()
{
USHORT *pInt = new USHORT ;
*pInt = 10 ;
std::cout << "pInt:" << *pInt << std::endl ;
delete pInt ;
long *pLong = new long ;
*pIong = 90000 ;
std::cout << "*pLong:" << *pLong << endl ;
*pInt = 20 ;
std::cout << "pInt:" << *pInt << std::endl ;
*pInt = 20 ;
std::cout << "*pInt:" << *pInt << endl ;
std::cout << "*pLong:" << *pInt << endl;
delete pLong ;
return 0 ;
}
输出:
*pInt:10
*pLong:90000
*pInt:20
*pInt :65556
pInt声明为一个USHORT指针,并将其指向使用new分配的内存,将10存储到pInt指向的内存中,对指针使用delete后,pInt将成为一个迷途指针。
接着声明了一个新的指针pLong,它指向new分配的内存,将90000存储到pLong指向的内存中。它指向的是pInt原来指向的内存块,带来麻烦的是 pInt = 20,它将20赋值到pInt原先指向的内存,(pInt被释放后不再指向任何合法的内存,它仍可能指向原来的内存块)将覆盖pLong指向的内存。这被称为重踏指针,它通常是使用迷途指针产生的不幸后果。
总之。对指针使用delete后就不要再使用它。虽然这个指针仍指向原来的内存区域,但编译器可能已经将其他数据存储在这里。不重新给这个指针复制就再次使用它可能导致程序崩溃;更糟糕的是,程序可能表面上运行正常但是过不了几分钟后就崩溃了。这被称为定时炸弹,可不是好玩的。为了安全起见,删除指针后,
把其设置为空.这样便解除了它的武装。
这个程序故意创建了一个迷途指针:
typedef unsigned short int USHORT;
#include <iostream>
int main ()
{
USHORT *pInt = new USHORT ;
*pInt = 10 ;
std::cout << "pInt:" << *pInt << std::endl ;
delete pInt ;
long *pLong = new long ;
*pIong = 90000 ;
std::cout << "*pLong:" << *pLong << endl ;
*pInt = 20 ;
std::cout << "pInt:" << *pInt << std::endl ;
*pInt = 20 ;
std::cout << "*pInt:" << *pInt << endl ;
std::cout << "*pLong:" << *pInt << endl;
delete pLong ;
return 0 ;
}
输出:
*pInt:10
*pLong:90000
*pInt:20
*pInt :65556
pInt声明为一个USHORT指针,并将其指向使用new分配的内存,将10存储到pInt指向的内存中,对指针使用delete后,pInt将成为一个迷途指针。
接着声明了一个新的指针pLong,它指向new分配的内存,将90000存储到pLong指向的内存中。它指向的是pInt原来指向的内存块,带来麻烦的是 pInt = 20,它将20赋值到pInt原先指向的内存,(pInt被释放后不再指向任何合法的内存,它仍可能指向原来的内存块)将覆盖pLong指向的内存。这被称为重踏指针,它通常是使用迷途指针产生的不幸后果。
总之。对指针使用delete后就不要再使用它。虽然这个指针仍指向原来的内存区域,但编译器可能已经将其他数据存储在这里。不重新给这个指针复制就再次使用它可能导致程序崩溃;更糟糕的是,程序可能表面上运行正常但是过不了几分钟后就崩溃了。这被称为定时炸弹,可不是好玩的。为了安全起见,删除指针后,
把其设置为空.这样便解除了它的武装。
相关文章推荐
- 迷途指针
- 黑马程序员——C语言基础---指针
- 黑马程序员——C语言基础---又见指针
- Go语言学习六:指针与传递到函数的指针
- C/C++语言中的void及void指针总结
- C/C++语言void及void指针深层探索 .
- C 语言指针 5 分钟教程
- C_PlusPlus学习笔记 - 5_数组、指针和字符串 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)
- 迷途指针与野指针
- void及void指针(C/C++语言)
- C/C++语言中指向函数的指针
- C/C++语言void及void指针深层探索
- C语言基础学习9:指向指针的指针
- 学点 C 语言(21): 数据类型 - 数组与指针
- C语言中的指针
- C语言教学--一 一维数组与指针
- C语言指针和数组概述
- C语言基础及指针②之指针内存分析
- C语言指针的那些事(二)
- 黑马程序员---C 语言学习笔记之指针