在 C 中函数执行完成后,函数的本地数组是否仍然保留?

-1 c memory arrays function local-variables

我已在函数内声明并初始化了一个(动态?)数组bool,如下面这个简单示例所示。我正在使用相同的函数来填充它。我不希望在函数执行完成后将数组保留在计算机内存中,以允许在将来的函数调用中使用正确的值重新填充数组。一旦函数调用返回,它会自动从内存中删除吗?如果没有,解决方法是什么?

bool correct_count(int start, int end)
{
    int numbers[] = {};

    for (int i = 0; i < (end - start + 1); i++)
    {
        numbers[i] = start + i;
    }

    if (numbers[0] == start && numbers[end - start] == end)
    {
        return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

在这个简单的示例中,我们可以确定数组的大小,但我尝试编写的程序并非如此。另外,我还不允许在我的程序中使用与内存相关的运算符,例如解引用运算符或动态内存分配,因为这目前超出了我已经学到的范围。

use*_*248 5

  1. int numbers[] = {};不是有效代码。您必须指定数组大小,以便编译器知道要分配多少字节。在 C23 之前,您还必须忽略= {}并保留数据未初始化,或者初始化至少一个值(即= {0})。

  2. 如果无法事先确定数组的大小,则必须使用堆数组(通过int *numbers = malloc(DEFAULT_SIZE);)并realloc()在每次需要调整数组大小时调用。最好将每次分配的容量加倍,以便潜在昂贵的重新分配次数仅与最终数组大小的对数相关。但在这种情况下,您必须事后调用free(numbers);来释放内存。

  3. 所有自动变量,例如数组(即,不是static全局变量,也不是用 分配的malloc),一旦超出范围,就会被释放。这包括函数返回之后。