当我尝试访问已释放的地址时,程序将正常运行。有什么需要避免的商品吗?像某些命名的函数have_alloca(void *p)
可以返回是否p
是有效地址。
我知道valgrind
withtool=memcheck
可以做到这一点。但我想知道我是否可以从代码中避免它。
这是一个简单的例子:
#include <stdlib.h>
int main(int argc, char *argv[])
{
int *p = malloc(sizeof(int) * 10);
free(p);
*(p + 1) = 100;
return 0;
}
为什么我可以访问无效地址?并且程序可以在没有任何警告的情况下编译和运行。顺便说一句:Linux。