C语言中的“野指针”和“悬空指针”是什么

这篇文章主要介绍“C语言中的“野指针”和“悬空指针”是什么”,在日常操作中,相信很多人在C语言中的“野指针”和“悬空指针”是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中的“野指针”和“悬空指针”是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

茄子河网站建设公司创新互联公司,茄子河网站设计制作,有大型网站制作公司丰富经验。已为茄子河上1000+提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的茄子河做网站的公司定做!

“野指针”(wild pointer)

“野指针”(wild pointer):是没有被初始化过的指针,所以不确定指针具体指向。例如以下示例代码:

void *p;  // 此时 p 是“野指针”

因为“野指针”可能指向任意内存段,因此它可能会损坏正常的数据,也有可能引发其他未知错误。在实际的C语言程序开发中,定义指针时,一般都要尽量避免“野指针”的出现,可通过赋初值方式解决:

void *p = NULL;void *data = malloc(size);

悬空指针”(dangling pointer

“悬空指针”(dangling pointer):是指针最初指向的内存已经被释放了的一种指针。通俗点可以理解:指针指向一块内存,如果这块内存稍后被操作系统回收(被释放),但是指针仍然指向这块内存,那么,此时该指针就是“悬空指针”。例如以下示例代码:

void *p = malloc(size);assert(p);free(p); // 现在 p 是“悬空指针”

C语言中的“悬空指针”会引发不可预知的错误,而且这种错误一旦发生,很难定位。这是因为在 free(p) 之后,p 指针仍然指向之前分配的内存,如果这块内存暂时可以被程序访问并且不会造成冲突,那么之后使用 p 并不会引发错误。

所以在实际的C语言程序开发中,为了避免出现“悬空指针”引发不可预知的错误,在释放内存之后,常常会将指针 p 赋值为 NULL:

void *p = malloc(size);assert(p);free(p); // 避免“悬空指针”p = NULL;

到此,关于“C语言中的“野指针”和“悬空指针”是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


新闻标题:C语言中的“野指针”和“悬空指针”是什么
标题网址:http://scyanting.com/article/gcgiss.html