c - 为什么在访问阻塞/受限内存位置时不会出现段错误?

标签 c pointers memory memory-management scope

关于下面的代码,我的问题是因为“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/

相关文章:

java - Android 高效地从 Drawable 加载图像

c++ - 在标准容器上执行一系列操作时最小化峰值内存使用

c++ - Win32 C++ 中的 DrawText 内存使用量增加

C、前后自增,不同程序答案不同

c++ - C 或 C++ : Libraries for factoring integers?

c - 为什么我不能将此指针设置为 NULL?

c++ - 进入智能指针,如何处理代表所有权?

c++ - 如何使用 C/C++ 操作 Linux 上的应用程序窗口

c++ - c/c++ 自然语言处理库

c++ - C++ 中的列表数组。指针;/