野指针相关问题

最近在学习并行编程时注意到了UAF(USE-AFTER-FREE)问题,引发UAF问题的原因一般是因为在释放了某个指针指向的内存后,并没有将该指针置空,从而可以通过该指针非法地修改内存。
以前因为一直都没有写过大型项目,也不曾特别关心安全问题,虽然知道在指针申请后手动置为NULL但一度以为在free()之后该指针会被自动置为NULL或者废置。(事实上在debug版本里大部分编译器确实会自动将指针置为0xdddddddd,但是在realse版本中则不会)
想要避免这个问题解决方式十分直观,就是养成良好的使用指针的习惯,即:
1. 初始化时置 NULL
2. 释放时置 NULL

对于释放时的置NULL,有一个常用技巧:即定义一个宏来释放内存及将指针置NULL:

#define xfree(x) free(x); x = NULL;
// 在 C++ 中应使用 nullptr 指代空指针
// 一些平台上的 C/C++ 已经预先添加了 xfree 拓展,如 GNU 的 

libiberty
xfree(p);
// 用函数实现,例如 GitHub 上的 AOSC-Dev/Anthon-Starter #9:
static inline void *Xfree(void *ptr) {
    free(ptr);
#ifdef __cplusplus
    return nullptr;
#else
    return NULL;
#endif
}
q=Xfree(q);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值