不使用malloc在运行时分配内存是不可能的吗?

不使用malloc在运行时分配内存是不可能的吗?,c,C,在这种情况下,如果我们在运行时没有将内存分配给“a”,那么为什么要使用malloc呢?chara[n]在旧的C标准中是不允许的。它在C99中是允许的,但仅适用于自动变量(即,在堆栈上,如您的示例中)。例如,如果您想要一个全局变量,则需要使用malloc等来遵守该标准 编辑以提供一些证据 在C中有一个关于可变长度数组的例子。从第二篇文章中可以看出,“VLA必须是块中的自动(与静态或外部)变量。”事实上,编译器会在内部将其转换为alloca(),如果可能,它会尝试在堆栈上分配存储,如果不可能,它可以

在这种情况下,如果我们在运行时没有将内存分配给“a”,那么为什么要使用malloc呢?

chara[n]
在旧的C标准中是不允许的。它在C99中是允许的,但仅适用于自动变量(即,在堆栈上,如您的示例中)。例如,如果您想要一个全局变量,则需要使用
malloc
等来遵守该标准

编辑以提供一些证据


在C中有一个关于可变长度数组的例子。从第二篇文章中可以看出,“VLA必须是块中的自动(与静态或外部)变量。”

事实上,编译器会在内部将其转换为alloca(),如果可能,它会尝试在堆栈上分配存储,如果不可能,它可以使用常规malloc。在第二种情况下,当堆栈帧崩溃时,它将调用regular free()。我不认为这个问题是链接问题的重复。我不同意这是重复。另一个答案中没有涉及可变长度数组的一些具体问题。
main()
{
        int n;
        scanf("%d",&n);
        char a[n];
}