【linux c】什么是野指针以及如何避免野指针_学习笔记_010
来源:互联网 发布:mac里面xp升级win7 编辑:程序博客网 时间:2024/05/22 22:21
1.首先以一个示例来认识野指针:
#include <stdio.h> int main(){ int * p; scanf("%d", p); printf("%d\n", * p); return 0;}
该段程序编译并未报任何错误,而运行之后,输入具体值后,报段错误:
2
段错误
为什么会出现段错误?
因为此处定义了一个局部变量,系统随机分配给p一个地址,往p保存的随机地址中赋值,该值不一定可用。
说了这么多,那么什么是野指针?
野指针:随机指向一块内存指针。这样的指针会导致内存泄漏(没有让p使用却使用了)。
不可用内存区域主要分为两块:
①指向没有访问权限的内存;
②指向已经释放的内存。
但是为什么有时候用了野指针,却可以正常运行呢?
这就好比你在路上捡了一把钥匙,虽然可以开对应的房间门,但是却不能随意去开人家的门,这是犯法。但是,当你捡到的钥匙是自己家的,或者是女朋友家的,你就可以合法地开门了。
运行正常,就是因为野指针捡到了自己家的”钥匙”。
2.如何避免野指针
以一个示例来讲解如何避免野指针:
#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX_SIZE sizeof(char) * 100int main(){ char *ptr = NULL; //若定义的指针没有指向,则赋值为空 ptr = (char *)malloc(MAX_SIZE); //为指针分配动态内存空间 if(NULL == ptr) //判断动态内存是否分配成功 { printf("error malloc\n"); exit(1); } memset(ptr, 0, MAX_SIZE); //对分配的内存进行初始化,初始化为0 scanf("%s", ptr); printf("ptr = %s\n",ptr); free(ptr); //指针使用完后释放内存 ptr = NULL; //释放后将指针置为空 return 0;}
野指针无法完全杜绝,但是通过如上的编码规范,可以很大程度上避免野指针。
0 0
- 【linux c】什么是野指针以及如何避免野指针_学习笔记_010
- 什么是野指针以及如何避免野指针?
- 什么是野指针,如何避免?
- 什么是野指针?如何避免野指针?
- 什么是野指针 如何避免野指针
- 什么是野指针如何避免野指针
- 什么是野指针?应该如何避免?
- 什么是野指针?应该如何避免?
- 什么是野指针和内存泄漏?如何避免野指针
- 野指针出现以及如何避免问题
- 如何避免野指针
- 如何避免野指针
- 如何避免野指针
- 如何避免野指针
- 如何避免野指针?
- 野指针如何避免
- 如何避免野指针
- 如何避免野指针?
- SortedMap接口源码解析
- Android开发——获取应用数据/缓存大小并清理缓存
- Eclipse之安装及汉化步骤
- 踩水
- 【NOIP2016提高A组模拟7.17】锦标赛
- 【linux c】什么是野指针以及如何避免野指针_学习笔记_010
- 参考韩顺平老师的视频,用HTML写一个静态网页的邮箱
- IntelliJ IDEA Maven 安装配置
- 冒泡排序
- POJ1753-Flip Game
- atomic工作原理 使用CAS实现线程安全
- Java Arrays类进行数组排序
- Base64
- LeetCode 118. Pascal's Triangle