关于下面的代码,我的问题是因为“ptr”在本地 block 中。那么它如何在功能 block 之外访问。应该限制吧?就像一个普通的变量。我们正在尝试访问另一个函数的内存位置。
int * add(int a, int b){
// local pointer variable
int *ptr=NULL,c=0;
c = a+b;
ptr = &c;
return ptr;
}
int main()
{
// calling add function and accessing
// the value received using reference(*).
printf("%d",*add(2,3));
}
最佳答案
变量是在堆栈上创建的。堆栈由系统以至少几千字节的粒度分配并且不会被释放,因此它不会崩溃——内存仍然可以访问。
所以尽管你在那里做了一个被禁止和不安全的事情,它可能会意外地工作甚至显示正确的值,因为在这两者之间没有函数调用会覆盖堆栈和 c
的值> 与此同时。
关于c - 为什么在访问阻塞/受限内存位置时不会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23933892/