C如何使用指针管理堆栈?

问题描述 投票:0回答:1

因此,我搞砸了动态内存和指针,我想知道当涉及指向局部变量的指针时,C如何管理堆栈。我想到了这个简单的功能:

int* dummy(){
  int test = 4;
  int *t2;
  t2 = &test;
  return t2;
}

此函数初始化一个指针,并将int作为局部变量(不应在函数外部访问,因为一旦退出函数,堆栈状态将被恢复)。但是,我将返回指针作为函数的结果。我可以找回指针并使用:

打印我的局部变量的值
#include <stdio.h>

int main(void){
   int* p = dummy();
// some other calls to other functions to mess up the bellow stack, 
// where my local variable "test" was supposed to be landing
   printf("%d\n", *p); // printing the value of "test" (which is 4)
}

为什么此打印正确的结果?指针不是从其他状态指向堆栈中的变量吗?我很困惑。

如果内存留在没有动态分配的位置,它将留在哪里?它会永远丢失吗? (无法“释放”它)

c pointers memory
1个回答
1
投票

未定义的行为是未定义的。此程序可以打印的值在任何意义上都没有“正确”的含义。让您感到困惑的是,您认为该程序可以打印一些“正确”的值,因此您想知道为什么它会打印“正确”的值。

问题完全出在您对某些值比其他值更“正确”的错误理解。对于该程序,所有值都同样“正确”。

© www.soinside.com 2019 - 2024. All rights reserved.