c - 在运行时提供数组大小与动态内存分配之间的区别

标签 c

<分区>

在下面的代码中,我在运行时提供了数组的大小。

#include <stdio.h>

int main()
{
    int i;
    scanf("%d",&i);
    int a[i];
}

请告诉我上面的代码和使用malloc() 的代码之间的区别。 我知道数组存储在堆栈上,动态内存(malloccalloc 等)在堆上。 那么我的代码功能是否类似于 malloc?如果不是,请解释。

最佳答案

除了您的代码使用 VLA 之外:

  • 在 C99 之前不存在
  • 在 C99 中作为新特性引入
  • 现在是自 C11 以来的可选功能

不同之处在于,自动数组(VLA 或静态大小的数组)在超出范围时会自动释放,因此您不能从函数返回它们,而动态分配的数组会一直存在,直到它们被显式释放 - 这应该发生在之前如果您不想内存泄漏,您将丢失指向它们的指针。

关于c - 在运行时提供数组大小与动态内存分配之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40904047/

相关文章:

c - (int *)0是空指针吗?

C 程序在调用 perl 函数 newSVpv() 时不断崩溃

c - 分配适当的变量以使这些声明正确

c - 如何捕捉文件模式?

c - 当我使用 free() 时,c 中的程序遇到无限循环

c - 如何在程序中区分指针地址

java - 这段代码到 OpenCV Java 的翻译是什么?

C : How to detect if execvp waiting for standard input?

c - 如何使用 C 压缩字符串并用其计数替换重复项?

c - 转换到 iphdr 和 tcphdr 的正确偏移量是多少?