gpt4 book ai didi

c - 为什么在 C 中没有为错误的数组动态分配标记错误?

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:03 25 4
gpt4 key购买 nike

#include<stdio.h>
void main(){
int n = 0;
scanf("%d",&n);
int a[n];
printf("Number of elements in array is %ld\n",sizeof(a)/sizeof(int));
}

我在上面展示了在 C 中动态分配数组的错误方法。动态分配的正确方法是使用 malloc。在数组的当前声明中(由于 C 的语法),变量“a”应该在编译时而不是在运行时分配。所以它应该在数据段中。但是动态分配的任何东西都在堆中。我有两个问题:

  1. 变量“n”必须是常量,以便“a”在编译时分配到数据段中,而不是在运行时分配。这个程序编译没有错误。为什么在编译结束时没有错误标记或至少没有警告?

  2. 我执行了这段代码并为 n 赋值,但发现分配给数组“a”的元素数恰好是 n。这是怎么回事?还有数组分配在哪里?

我在 ubuntu 16.04 中使用 gcc 编译器 5.4.0。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com