在 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/