温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-08-27 17:54:13 来源:亿速云 阅读:212 作者:chen 栏目:互联网科技

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

“野指针”(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语言中的“野指针”和“悬空指针”是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI