如果存在 VLA,为什么还需要 malloc?

why is malloc still needed if VLAs exist?

众所周知,有两种类型的数组,静态和动态。静态数组大小在编译时定义,动态数组大小使用 malloc 定义。在此代码中,您可以看到我没有使用 malloc,我正在处理动态数组,我所有的数组操作都是 运行.

int main()
{
    int capofarr,sizeofarr,i,choice,choice2,ele,pos,choice3;
    printf("enter the size of array:");
    scanf("%d",&capofarr);
    int arr[capofarr];
    printf("Enter the element that you want to store in array:");
    scanf("%d",&sizeofarr);
    if(capofarr>=sizeofarr)
    {
    
    for(i=0;i<=sizeofarr-1;i++)
    {
    printf("Enter value of arr[%d]=",i+1);
    scanf("%d",&arr[i]);
    }

是的,您的所有操作都是 运行,但 malloc 的目的是分配所需的内存量,以免内存被浪费。但在你的情况下,我的情况是 (capofarr > sizeofarr) 内存被浪费了,即。浪费的内存大小为 (capofarr-sizeofarr)*sizeof(a[0])。如果我错了,请纠正我。谢谢