加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何避免访问已释放的地址?

发布时间:2020-12-16 10:53:18 所属栏目:百科 来源:网络整理
导读:当我尝试访问已经释放的地址时,程序将正常运行.有些货物要避免吗?像一些名为have_alloca(void * p)的函数可以返回p是否是有效地址. 我知道valgrind with tool = memcheck可以做到这一点.但我想知道我是否可以从代码中避免它. 这是一个简单的例子: #include
当我尝试访问已经释放的地址时,程序将正常运行.有些货物要避免吗?像一些名为have_alloca(void * p)的函数可以返回p是否是有效地址.
我知道valgrind with tool = memcheck可以做到这一点.但我想知道我是否可以从代码中避免它.
这是一个简单的例子:

#include <stdlib.h>

int main(int argc,char *argv[])
{
    int *p = malloc(sizeof(int) * 10);
    free(p);
    *(p + 1) = 100;

    return 0;
}

为什么我可以访问无效地址?程序可以编译运行,没有任何警告.
顺便说一句:Linux.

解决方法

不,你必须自己照顾好这个.
从技术上讲,从语言标准的角度来看,写入不属于您的内存位置是未定义行为.

语言C和C使您可以灵活地访问变量地址并使用它们,代价是您负责这些地址包含变量/对象拥有的有效值.

理由是:

“拥有更大的力量带来更大的责任”

所以责任由你自己承担.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读