指向C ++中的局部变量

可能重复:
局部变量的内存是否可以在其范围之外访问?

我在C ++中有以下代码

int* foo()
{
    int myVar = 4;
    int* ptr = &myVar;
    return ptr;
}

int main()
{
   printf("val= %d", *foo());
   return 0;
}

我得到的输出是:

val = 4

所以我的问题是因为myVar是一个局部变量,不应该在函数返回后消失吗? 并且不应该指向它的指针也是空指针?


所以我的问题是,因为myVar是一个局部变量,它应该在函数返回后消失吗?

是。 它会指向您设置的地址。 然而,该地区是该地区的功能。 假定在它指出超出范围之后它不属于你。

这是不正确的:

uint8_t* p = (uint8_t*)malloc(count);
free(p);
p[0] = 1;

但对于您或您的工具进行诊断的错误要困难得多,因为该区域将存在于堆栈中(除非进行了优化)。

并且不应该指向它的指针也是空指针?

不,C和C ++不会为你管理这个。


在你的情况下, printf("val= %d", *foo())正在打印垃圾值。 由于没有其他代码,该数据未被更改。

你运行这个代码,你会明白

    int* foo() 
    { 
        int myVar = 4; 
        int* ptr = &myVar; 
        return ptr; 
    } 

    int* foo1() 
    { 
        int myVar = 5; 
        int* ptr = &myVar; 
        return ptr; 
    } 
    int main() 
    { 
        int* x = foo();
        int* x1 = foo1();
       printf("val= %d", *x); 
       return 0; 
    } 

ptr *处的地址将保持分配状态,如果再次调用函数,它将更改指针。 至少这是我的理论。 出于性能原因,C ++不会覆盖您的指针。

int foo(int val) {
  int myVar = val;
  int* ptr = &myVar;
  return ptr; 
}

int main()
{
   int *ptr = foo(4);
   foo(3);
   printf("val= %d", *ptr); //will print 3
   return 0;
}
链接地址: http://www.djcxy.com/p/36335.html

上一篇: Pointer to local variable in C++

下一篇: local memory address is valid after function return?