C/C++|空指针和野指针

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

int *ptr_1 = 0; int *ptr_2 = NULL;

空指针使用*ptr 会报错。
printf("%d\n",*p)

野指针 区别于空指针,野指针指向内存,该内存不可用,并且危险。
形成原因 指针未初始化
任何指针变量被刚创建时不会被自动初始化为NULL指针,它的缺省值是随机的。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
char* p = NULL; char* str = (char*)malloc(1024);

指针释放后未置空
【C/C++|空指针和野指针】该指针由于仍然指向某一块内存,即使该内存已经被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); //可能输出未知数据


    推荐阅读