gpt4 book ai didi

c - 为该数组保留的内存何时被释放?

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

虽然有人提出了类似的问题Is it possible to deallocate a statically defined array?之前我有一个相关的查询。

    int* foo()
{
int arr[3] = {1, 2, 3};
return arr;
}
int bar(const int*)
{
doSomething with int*;
}
int main()
{
bar( foo() );
}

什么时候内存分配给arrfoo()被解除分配?是一个静态分配的数组,如 arr通常不是自动的?不过,这种语法似乎有效,分配给 arr 的内存也是如此。仅在 bar() 完成后释放?或者即使那时也没有?如果没有,我该如何释放它?

编辑:抱歉,忘记包含 main.c 文件。是的,这似乎是重复的帖子。

最佳答案

你的数组的行为就像一个普通变量,因为它实际上就是一个。C 或 C++ 中的变量范围通常由当前 block 定义,即您的函数 foo .

作为你的数组arr位于程序的堆栈区域内,您永远不应该返回指向局部变量的指针。

堆栈内存部分在 foo 之后无效。函数返回,因此如果取消引用 foo 的返回值,您将访问不允许的内存区域。 。这会导致未定义的行为。所以一切都可能破裂或者什么都没有。但这并不是您想要的。

如果您想返回一个生命周期更长的数组,可以通过使用 new 创建数组来在堆内存部分分配内存。 malloc 。您可以在 foo 之后访问它- 函数返回。但你必须free delete[] 你的数组比手工的要好。

您也许应该阅读有关 C/C++ 内存布局的更多信息:http://www.geeksforgeeks.org/memory-layout-of-c-program/

关于c - 为该数组保留的内存何时被释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23678309/

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