【发布时间】:2012-12-29 05:37:55
【问题描述】:
当我尝试访问一个已经被释放的地址时,程序会正常运行。有什么需要避免的商品吗?像一些名为 have_alloca(void *p) 的函数可以返回 p 是否是有效地址。
我知道valgrind 和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。
【问题讨论】:
-
这和linux有什么关系?
-
@ValekHalfHeart:不是很多,但如果有一个解决方案只适用于 Windows(或 Solaris,或 Mac OS X,或 FreeBSD,或......),它不会有帮助madper,如果有一个仅适用于 Linux 的解决方案,那将会很有帮助。事实上,在任何平台上都没有通用解决方案。