请选择 进入手机版 | 继续访问电脑版

专注代码检测 - 阅镜

 找回密码
 立即注册
热搜: 安装 代码
查看: 122|回复: 0

释放完后置空指针

[复制链接]

70

主题

70

帖子

232

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
232
发表于 2021-9-10 20:49:02 | 显示全部楼层 |阅读模式
在对指针进行释放后,需要将该指针设置为NULL,以防止后续free指针的误用,导致UAF等其他内存破坏问题。尤其是在结构体、类里面存储的原始指针。

错误:
  1. void foo() {
  2.   char* p = (char*)malloc(100);
  3.   memcpy(p, "hello", 6);
  4.   printf("%s\n", p);
  5.   free(p); // 此时p所指向的内存已被释放,但是p所指的地址仍然不变
  6.   // 未设置为NULL,可能导致UAF等内存错误

  7.   if (p != NULL) {  // 没有起到防错作用
  8.     printf("%s\n", p); // 错误使用已经释放的内存
  9.   }
  10. }
复制代码

正确:
  1. void foo() {
  2.   char* p = (char*)malloc(100);
  3.   memcpy(p, "hello", 6);
  4.   // 此时p所指向的内存已被释放,但是p所指的地址仍然不变
  5.   printf("%s\n", p);
  6.   free(p);
  7.   //释放后将指针赋值为空
  8.   p = NULL;
  9.   if (p != NULL)  { // 没有起到防错作用
  10.     printf("%s\n", p); // 错误使用已经释放的内存
  11.   }
  12. }
复制代码

对于 C++ 代码,使用 string、vector、智能指针等代替原始内存管理机制,可以大量减少这类错误。

关联漏洞:
  1.   高风险-内存破坏
复制代码
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

QQ|Archiver|手机版|小黑屋| 阅镜 ( 京ICP备2020034574号 )|网站地图|网站地图点击这里给我发消息

GMT+8, 2022-1-17 10:15 , Processed in 0.073776 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表