为什么在访问被阻止/受限制的内存位置时没有分段错误?

时间:2014-05-29 12:57:12

标签: c pointers memory memory-management scope

关于下面的代码我的问题是" ptr"在当地街区。然后如何在功能块外部访问它。应该限制​​否?就像一个普通的变量。我们正在尝试访问另一个功能的内存位置。

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));
}

2 个答案:

答案 0 :(得分:2)

变量在堆栈上创建。堆栈由系统分配,其粒度至少为几千字节,并且不会被释放,因此它不会崩溃 - 内存仍然可以访问。

因此,虽然你在那里做了一个禁止和不安全的事情,它可能会意外地工作甚至显示正确的值,因为它们之间没有函数调用会覆盖堆栈和c中的值其间。

答案 1 :(得分:0)

记住规则:永远不要返回指向局部变量的指针。

c返回时变量add不存在,因此指向它的指针无效。