gpt4 book ai didi

c - 函数中使用的内存何时会空闲??(C 编程)

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:25 26 4
gpt4 key购买 nike

下面是代码

代码:

#include <stdio.h>

int * num(void);

int main(void)
{
int * num2;
num2 =num();
printf("%d\n" , *num2);

return 0;
}


int * num(void)
{
int num = 20;

return &num;
}

问题:

  1. 正如我们所知,函数 num 是其函数 num() 的本地函数,因此在这段代码中,我尝试返回变量 的地址函数中的 code>num 到调用它的函数,即 main()

  2. 之后,我只使用解引用运算符提取特定 num 变量的值,并在 main() 函数中打印出来。

  3. 有一件事我很困惑。我记得我读过一本关于 javascript 的书,提到变量生命周期在函数内,这意味着在函数完成其指令并将控制权交还给调用它的函数后,函数中每个变量的值将是干净的out(garbage collector)。但是为什么在这段代码中我的 main() 函数仍然可以指向那个特定内存地址的值??

最佳答案

之所以可以看到变量的值,是因为堆栈的工作方式。实际上,当您输入函数 num 时,会移动一个指针(堆栈指针)以添加函数的本地存储空间。当您退出函数时,堆栈指针实际上被移回,这意味着下一个函数调用将覆盖前一个函数调用中使用的堆栈存储。然而,在它被覆盖之前,该值处于一种不确定状态。它实际上仍然存在于内存中,但随时可能被覆盖。实际值的存在可能存在也可能不存在。这就是为什么像上面那样做被称为未定义行为

基本上...不要这样做。

关于c - 函数中使用的内存何时会空闲??(C 编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7579069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com