gpt4 book ai didi

c - 函数返回后内存中的堆栈帧

转载 作者:行者123 更新时间:2023-11-30 20:31:27 24 4
gpt4 key购买 nike

调用函数后堆栈帧会发生什么变化?我有一个返回局部变量地址的函数 - 我应该能够做到这一点,还是在函数返回后堆栈帧被破坏?这是我的代码 - 我预计会得到错误的结果,但我得到了正确的结果。

#include<stdio.h>
#include<stdlib.h>
int* sum(int a,int b)
{
int x=a+b;
return &x;
}

int main()
{
int*a;
int x=5,y=6;
a=sum(x,y);
printf("%d",*a);
return 0;
}

最佳答案

在这种情况下,x 超出范围,它返回的值无效,因此,对它的任何引用都是未定义的行为。当事情超出范围时,就像返回您不再租用的公寓的地址一样。

至于内存会发生什么,它可能会被覆盖,也可能不会被覆盖。没关系。在该范围之外使用 x 是有问题的,不应该这样做。实际上,这个函数无法按设计工作,因为它产生的值是无用的。

在这个简单的示例中,当您可以以完全相同的成本返回 int 时,实际上没有理由返回指向 int 的指针。

如果您需要返回指向在函数内创建的值的指针,您必须动态分配该值,这样它就不会超出范围。这也隐含要求后续代码拥有该指针并将在适当的时间调用free

关于c - 函数返回后内存中的堆栈帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50878744/

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