欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

野指针和常见内存错误

程序员文章站 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) 进行检查;
  • 内存分配成功,但是没有初始化;内存默认的初始化方式并不一定是 0,申请内存之后要进行初始化;
  • 内存分配成功并已经初始化,但是操作越界;
  • 忘记释放内存,造成内存泄漏;
  • 释放内存依然使用该内存;释放内存后没有设置指针为 NULL,导致野指针;
相关标签: 内存管理