【问题标题】:Is it not possible to allocate memory at runtime without using malloc? [duplicate]不使用malloc就不能在运行时分配内存吗? [复制]
【发布时间】:2015-02-19 11:28:22
【问题描述】:
main()
{
        int n;
        scanf("%d",&n);
        char a[n];
}

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

【问题讨论】:

  • 事实上你是,内部编译器将其转换为 alloca(),如果可能,它会尝试在堆栈上分配存储空间,如果没有,它可以使用常规 malloc。在第二种情况下,它会在堆栈框架崩溃时调用常规 free()。
  • 我不认为这个问题是链接问题的欺骗。
  • 不同意这是一个骗局。可变长度数组存在其他答案中未涵盖的特定问题。

标签: c


【解决方案1】:

char a[n] 在旧的 C 标准中是不允许的。在 C99 中是允许的,但仅适用于自动变量(即在堆栈上,如您的示例中所示)。如果你想要一个全局变量,你需要使用malloc et。人。符合标准。

已编辑以提供一些证据

有一个helpful series of articles 关于 C 中的可变长度数组。在第二篇文章中,“VLA 必须是块中的自动(而不是静态或外部)变量。”

【讨论】:

    猜你喜欢
    • 2014-07-17
    • 2013-11-20
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2016-02-13
    • 2018-06-06
    相关资源
    最近更新 更多