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; } 为什么我可以访问无效地址?程序可以编译运行,没有任何警告. 解决方法
不,你必须自己照顾好这个.
从技术上讲,从语言标准的角度来看,写入不属于您的内存位置是未定义行为. 语言C和C使您可以灵活地访问变量地址并使用它们,代价是您负责这些地址包含变量/对象拥有的有效值. 理由是: “拥有更大的力量带来更大的责任” 所以责任由你自己承担. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |