动态分配没有malloc和calloc的数组

问题描述 投票:-2回答:1
printf("Enter number of elements\n");
scanf("%d",&n);
int num[sizeof(int)*n];

这是动态分配数组大小的正确方法吗?

c arrays dynamic-memory-allocation
1个回答
3
投票

非正式术语动态分配几乎肯定是指正式术语分配存储,意味着从malloc / calloc / realloc返回的堆内存。

当然,还有其他“动态的东西”,比如一个动态增长和下沉的堆栈,但我们不会调用堆栈分配动态分配。

因此,如果没有malloc / calloc / realloc,就不可能进行动态分配。


您的示例中包含的是可变长度数组(VLA)。它们在运行时分配,通常在堆栈上。你错误地使用它。你应该

  1. 在创建阵列之前,验证n是在1到max的特定范围内的有效值。
  2. int num[n];分配VLA。
© www.soinside.com 2019 - 2024. All rights reserved.