空指针和野指针

空指针

未初始化的指针或者初始化为0的指针

int *ptr_1 = 0;

int *ptr_2 = NULL;

空指针使用*ptr 会报错。

printf("%d\n",*p)

野指针

区别于空指针,野指针指向内存,该内存不可用,并且危险。

形成原因

指针未初始化

任何指针变量被刚创建时不会被自动初始化为NULL指针,它的缺省值是随机的。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。

char* p = NULL;  
char* str = (char*)malloc(1024);  

指针释放后未置空

该指针由于仍然指向某一块内存,即使该内存已经被free或者delete了,该指针的指向依然不变

char *p=new char[10];  //指向堆中分配的内存首地址,p存储在栈区

std::cin>> p;

delete []p; //p重新变为野指针

if(p != NULL) std::cout<<"野指针"<

指针操作超越变量作用域

不要返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放。

char *p=new char[10]; //指向堆中分配的内存首地址
std::cin>> p;
std::cout<<*(p+10); //可能输出未知数据

你可能感兴趣的:(C/C++,c语言,c++)