北京微信网站开发报价,企业 备案 网站服务内容,姓氏网站建设的意见和建议,云南新建设国际小学网站目录
一.简介二.野指针产生的原因 1.指针变量未初始化2.指针释放后之后未置空 三.避免野指针产生 1.初始化时置 NULL2.释放时置 NULL 四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 C 语言基础入门 一.简介
野指针就是指针指向的位置是不可知的#xff08;随…目录
一.简介二.野指针产生的原因 1.指针变量未初始化2.指针释放后之后未置空 三.避免野指针产生 1.初始化时置 NULL2.释放时置 NULL 四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 C 语言基础入门 一.简介
野指针就是指针指向的位置是不可知的随机的、不正确的、没有明确限制的
二.野指针产生的原因
1.指针变量未初始化
任何指针变量刚被创建时不会自动成为 NULL 指针它的缺省值是随机的。
所以指针变量在创建的同时应当被初始化要么将指针设置为 NULL 要么让它指向合法的内存。
如果没有初始化编译器会报错‘point’ may be uninitializedin the function。 2.指针释放后之后未置空
指针在 free 或 delete 后未赋值 NULL 它们只是把指针所指的内存给释放掉但并没有处理指针本身。此时指针指向不可知的随机的、不正确的、没有明确限制的。
释放后的指针应立即将指针置为NULL防止产生野指针。
三.避免野指针产生
1.初始化时置 NULL
指针变量一定要初始化为 NULL因为任何指针变量(除了 static 修饰的指针变量)刚被创建时不会自动成为 NULL 指针它的缺省值是随机的。
2.释放时置 NULL
当指针 p 指向的内存空间释放时没有设置指针 p 的值为 NULL 。delete 和 free 只是把内存空间释放了但是并没有将指针 p 的值赋为 NULL 。
通常判断一个指针是否合法都是使用 if 语句测试该指针是否为 NULL。例如
/******************************************************************************************/
//Author:猿说编程
//Blog(个人博客地址): www.codersrc.com
//File:C语言教程 - C语言 野指针
//Time:2021/06/20 08:00
//Motto:不积跬步无以至千里不积小流无以成江海程序人生的精彩需要坚持不懈地积累
/******************************************************************************************/#includestdlib.h
#includestdio.h
void main()
{int *p new int(6);printf(释放内存之前 p:%p\n, p);//delete 释放内存delete p;if (p ! NULL) //delete 之后指针指向未知/随机内存printf(释放内存之后 p:%p\n, p);//*p 7; //操作未知/随机的内存地址程序异常崩溃system(pause);
}
/*
输出
释放内存之前 p:016950E8
释放内存之后 p:00008123
请按任意键继续. . .
*/重上面的代码输出结果可以看出delete 之后指针 p 地址并没有被置为 NULL p 此时指向一块随机/未知的内存地址一旦对未知的内存地址操作或者访问程序崩溃
四.猜你喜欢
C 语言逻辑运算符C 语言三目运算符C 语言逗号表达式C 语言 sizeof 和 strlen 函数区别C 语言 strcpy 和 strcpy_s 函数区别C 语言 memcpy 和 memcpy_s 区别C 语言 数组定义和使用C 语言 数组遍历C 语言 数组下标越界C 语言 数组内存溢出C 语言 数组下标越界和内存溢出区别C 语言 二维数组定义和使用C 语言 二维数组行数和列数计算C 语言 指针声明和定义C 语言 指针 p / p–C 语言 p/§/_(p)/_pC 语言 使用指针遍历数组C 语言 指针和数组区别C 语言 数组指针C 语言 指针数组C 语言 指针数组和数组指针区别C 语言 空指针 NULLC 语言 void 指针C 语言 野指针
未经允许不得转载猿说编程 » C 语言 野指针