gpt4 book ai didi

objective-c - C和Objective-C中返回地址的内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:01 24 4
gpt4 key购买 nike

在 C 函数中,局部变量的内存在函数被调用时分配,并在函数结束时释放。对于返回值(例如 int、string)的函数,何时何地分配和释放返回地址的内存,它是调用堆栈的一部分吗还是被调用者栈,或者别的什么?

考虑以下示例:

int* foo()
{
int _myInt;
return(&_myInt);
}

这个例子让我对如何为返回指针的返回地址分配内存感到完全困惑。有人可以解释一下吗?

C 和 Objective-C 也一样吗?

最佳答案

我不知道 Objective-C,但对于标准 C,返回值通常存储在寄存器中。

当函数返回指针类型时,由开发人员确保指向的内存在调用后仍然有效。

考虑以下函数:

char* GetStr()
{
char buff[50];
strcpy(buff, "Hello, World!");
return buff;
}

此函数返回一个指向本地内存的指针,该指针在函数返回时被释放。访问该内存将构成具有未定义行为的错误。

这也适用于您的示例,该示例无效。但是由于 int 可以放入寄存器中,您可以简单地执行 return _myInt; 并直接返回值。

关于objective-c - C和Objective-C中返回地址的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9238198/

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