[其它应用] 悬挂指针和野指针的区别

[复制链接]
6113|11
 楼主| laocuo1142 发表于 2024-11-13 13:56 | 显示全部楼层 |阅读模式
在C语言中,悬挂指针(dangling pointer)和野指针(wild pointer)是两个常见的问题,它们都涉及到指针的使用错误。悬挂指针(Dangling Pointer)「概念:」 悬挂指针是指指向已经释放的内存地址的指针。当内存被释放后,指向该内存的指针仍保留着原来的地址,此时如果该指针被解引用,就会导致未定义行为。「应用:」 悬挂指针通常发生在以下情况下:当指针指向的内存被释放或回收,但指针本身未被置为 NULL 或重新分配。当指针指向的内存超出了作用域,比如指向了一个局部变量的地址,但函数执行完毕后该地址的内容已经无效。「代码案例:」int* danglingPointer() {
    int x = 10;
    int* ptr = &x;
    return ptr;
}

int main() {
    int* ptr = danglingPointer();
    // 在此处ptr成为悬挂指针,因为它指向的是一个局部变量x的地址,x已经超出作用域
    // 尝试解引用ptr会导致未定义行为
    return 0;
}
「错误使用的后果:」 解引用悬挂指针通常会导致程序崩溃、数据损坏或其他不可预测的行为,因为悬挂指针指向的内存可能已经被其他程序使用,或者该内存已经被系统回收。野指针(Wild Pointer)「概念:」 野指针是指没有被正确初始化的指针,它指向的地址是随机的、未知的或无效的。野指针通常会导致访问非法内存地址,从而引发程序崩溃或数据损坏。「应用:」 野指针通常发生在以下情况下:没有为指针分配内存就开始使用它。指针被释放后未被置为 NULL。指针超出了其作用域,但仍然被使用。「代码案例:」int* wildPointer() {
    int* ptr;
    *ptr = 10; // 这里ptr是一个野指针,因为它未被初始化就被解引用
    return ptr;
}

int main() {
    int* ptr = wildPointer();
    return 0;
}
「错误使用的后果:」 解引用野指针会导致程序崩溃或数据损坏,因为野指针指向的内存地址是不可预测的,可能已经被其他程序使用或者根本不存在。总结「悬挂指针」:指向已经释放的内存地址的指针,解引用会导致未定义行为。「野指针」:未被正确初始化或指向无效地址的指针,解引用会导致程序崩溃或数据损坏。
szt1993 发表于 2024-11-20 10:41 | 显示全部楼层
野指针一定要注意,很容易发生问题
LOVEEVER 发表于 2024-11-25 23:49 | 显示全部楼层
当指针指向的内存超出了作用域,比如指向了一个局部变量的地址,但函数执行完毕后该地址的内容已经无效。
中国龙芯CDX 发表于 2024-11-27 09:33 | 显示全部楼层
野指针是指没有被正确初始化的指针,它指向的地址是随机的、未知的或无效的。
Henryko 发表于 2024-11-30 08:42 来自手机 | 显示全部楼层
释放后的指针是不是要指向空指针啊
AdaMaYun 发表于 2024-11-30 16:22 | 显示全部楼层
悬挂指针(dangling pointer)和野指针(wild pointer)是两个常见的问题一定要规避
Bowclad 发表于 2024-12-13 15:55 | 显示全部楼层
悬挂指针是没有解引用的野指针吗?
小夏天的大西瓜 发表于 2024-12-15 22:31 | 显示全部楼层
悬挂指针(dangling pointer)和野指针(wild pointer)是两个常见的问题一定要注意规避
OKAKAKO 发表于 2024-12-22 21:42 | 显示全部楼层
悬挂指针是指指向已经释放的内存地址的指针
桃乐丝 发表于 2025-6-27 20:46 | 显示全部楼层
悬挂指针和野指针均指向无效内存,区别在于:悬挂指针曾指向合法内存,因对象释放 / 空间重分配变为无效;野指针未初始化或未正确指向,指向随机内存。两者均可能引发程序崩溃或安全漏洞,需通过初始化、释放后置 NULL 等避免。
一点点晚风 发表于 2025-7-7 10:57 | 显示全部楼层
[color=rgba(0, 0, 0, 0.85)]悬挂指针曾合法后悬空,野指针从未被正确初始化。
野玫瑰 发表于 2025-7-16 19:57 | 显示全部楼层
[color=rgba(0, 0, 0, 0.85)]悬挂指针指向曾分配但已释放的内存,野指针未初始化或指向未知位置,前者有历史指向,后者完全无合法指向。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1296

主题

6239

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部