避免野指针的产生
2015-08-03 16:19
197 查看
1,所谓野指针就是:指向一个已删除的对象或未申请访问受限内存区域的指针。
避免方法:在使用free释放指向内存空间之后载加上一个 p = NULL;
例:
if (p2 != NULL)
{
free(p2);
p2 = NULL;
}
void main01()
{
char buf[100];
//byte b1 = new byte[100];
int a = 10; // 分配4个字节的内存 栈区也叫临时区
int *p;// 分配4个字节的内存
p = &a; //cpu 执行的代码,放在代码区
// 若不写则产生一个野指针,所谓野指针就是内存地址指向一堆乱码的指针
// 原因:指针变量和它所指向的内存空间变量是两个不同的概念,这里的 free释放了p2 指向的内存空间,但是指针变量本身没有重置成 NULL
// 造成if中判断 p2! =NULL成立
// 避免方法:定义指针的时候初始化成 NULL
if (p2 != NULL)
{
free(p2);
}
}
}
避免方法:在使用free释放指向内存空间之后载加上一个 p = NULL;
例:
if (p2 != NULL)
{
free(p2);
p2 = NULL;
}
void main01()
{
char buf[100];
//byte b1 = new byte[100];
int a = 10; // 分配4个字节的内存 栈区也叫临时区
int *p;// 分配4个字节的内存
p = &a; //cpu 执行的代码,放在代码区
*p = 20; // { char *p2 = NULL; // 分配4个字节的内存 栈区也叫临时区 p2 = (char *)malloc(100); // 内存泄露概念 if (p2 != NULL) { free(p2); //p2 = NULL; 若不写,实验效果 ,分析原因 }
// 若不写则产生一个野指针,所谓野指针就是内存地址指向一堆乱码的指针
// 原因:指针变量和它所指向的内存空间变量是两个不同的概念,这里的 free释放了p2 指向的内存空间,但是指针变量本身没有重置成 NULL
// 造成if中判断 p2! =NULL成立
// 避免方法:定义指针的时候初始化成 NULL
if (p2 != NULL)
{
free(p2);
}
}
system("pause");
}
相关文章推荐
- 关于指针的一些事情
- C# Pointer指针应用实例简述
- C++智能指针实例详解
- C++指向函数的指针实例解析
- 关于c语言指针的两处小tip分享
- 浅析iterator与指针的区别
- 探讨C++中数组名与指针的用法比较分析
- 详解C++中的指针、数组指针与函数指针
- C语言安全之数组长度与指针实例解析
- C++中指向对象的常指针与指向常对象的指针详解
- 指向变量的常指针与指向常变量的指针详细解析
- C#通过指针实现快速拷贝的方法
- php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
- C#通过指针读取文件的方法
- C语言指针学习经验总结浅谈
- C++交换指针实例
- C/C++中指针和引用之相关问题深入研究
- C++基础入门教程(四):枚举和指针
- c++传递函数指针和bind的示例
- 指针与const限定符的使用分析