C语言-----野指针
2024-09-01 19:00:35
问题所在
1、局部指针变量没有被初始化
2、使用已经释放过后的指针
3、指针所指向的变量在指针之前被销毁
4、结构体成员指针未初始化, 没有为结构体指针分配足够的内存 ,内存越界(考虑使用柔性数组)和泄露
避免规则
1、用malloc申请了内存之后,应该立即检查指针值是否为NULL,防止使用值为NULL的指针
2、牢记数组的长度,防止数组越界操作,考虑使用柔性数组
3、动态申请操作必须和释放操作匹配,防止内存泄露和多次释放
4、free指针之后必须立即赋值为NULL
malloc用于从堆中分配一块指定大小的内存,以void *的类型返回这块内存的起始地址。malloc的参数就是要分配的内存的大小,以字节为单位。
所以如果要分配1个整型空间就需要malloc(sizeof(int)),由于返回的void *不能直接赋值给int *,所以还要进行一次强制类型转换int * s=(int*)malloc(sizeof(int));
struct Student
{
char* name;
int number;
};
int main()
{
struct Student s;
strcpy(s.name, "gggg"); // OOPS! ////////////////////////////////////野指针,,不能随便赋值,因为s是一个局部变量,name保存的地址是个随机值,不能往随机值里写东西/////////////////////////////////////////////
s.number = 99;
return 0;
}
最新文章
- 游走 bzoj 3143
- 开篇一文 php 和 js 默认参数
- 使用session防止重复提交
- iOS 编程思想
- 第二百八十六天 how can I 坚持
- 笔记本CPU的型号和类型的区分方法
- C++封装常用对象和对头文件探索
- QQ在线咨询状态显示不出来怎么办?http://bizapp.qq.com/webpres.htm
- Visual Studio 20**自动添加头部注释信息
- Webdriver的设计模式:Page Object(页面模型)
- 【NOIP2015资源+题解】
- 安装vue-cli
- CLOUD不审核修改物料
- js对字符串的一些操作方法
- WMS与MES集成
- Mycat 配置及优化【转】
- Nginx防盗链的3种方法 文件防盗链 图片防盗链 视频防盗链 linux防盗链
- testng入门教程6 TestNG忽略测试
- spring cloud 知识点
- 关于事件委托的整理 ,另附bind,live,delegate,on区别