野指针和常见内存错误
程序员文章站
2022-06-04 11:06:53
...
野指针
野指针:野指针不是 NULL 指针,是指向 “垃圾内存” 的指针;
野指针产生的原因
- 指针变量没有初始化;没有初始化的指针,指向是随机的;
// 正确的初始化方式
char* p = NULL;
char* str = (char*) malloc(100);
- 指针 p 被 free 或者 delete 之后,没有设置 NULL,让人误以为是合法指针;
char *p = (char *)malloc(100);
strcpy(p, "hello");
free(p);
if(p != NULL) strcpy(p, "world"); // 出错
常见的内存错误
- 内存未分配成功,却引用了它;常用的解决办法:
- 如果 p 是形参,则在函数入口处用
assert(p != NULL)
; - 如果 p 是 malloc 和 new 申请的内存,应该用
if(!p)
进行检查;
- 如果 p 是形参,则在函数入口处用
- 内存分配成功,但是没有初始化;内存默认的初始化方式并不一定是 0,申请内存之后要进行初始化;
- 内存分配成功并已经初始化,但是操作越界;
- 忘记释放内存,造成内存泄漏;
- 释放内存依然使用该内存;释放内存后没有设置指针为 NULL,导致野指针;
上一篇: 钟无艳:40岁还未嫁人,皇帝却为她遣散后宫专宠她一人
下一篇: MySQL优化(9)-数据库中的锁