相关疑难解决方法(0)

可以在其范围之外访问局部变量的内存吗?

我有以下代码.

#include <iostream>

int * foo()
{
    int a = 5;
    return &a;
}

int main()
{
    int* p = foo();
    std::cout << *p;
    *p = 8;
    std::cout << *p;
}
Run Code Online (Sandbox Code Playgroud)

而代码只是运行而没有运行时异常!

输出是 58

怎么会这样?本地变量的内存不能在其功能之外无法访问吗?

c++ memory-management local-variables dangling-pointer

990
推荐指数
19
解决办法
26万
查看次数

当变量超出范围时会发生什么?

在大多数托管语言(即具有GC的语言)中,超出范围的局部变量不可访问且具有更高的GC优先级(因此,它们将首先被释放).

现在,C不是托管语言,超出范围的变量会发生什么?

我用C创建了一个小测试用例:

#include <stdio.h>
int main(void){
    int *ptr;

    {
        // New scope
        int tmp = 17;
        ptr = &tmp; // Just to see if the memory is cleared
    }

    //printf("tmp = %d", tmp); // Compile-time error (as expected)
    printf("ptr = %d\n", *ptr);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用GCC 4.7.3编译并打印上面的程序17,为什么?何时/在什么情况下会释放局部变量?

c memory-management

14
推荐指数
2
解决办法
7468
查看次数