2

我正在编写一个涉及malloc创建全局数组的程序。我试过这个(main()当然是在外面):

int *arr=malloc(5*sizeof(int));

在 GCC 编译器中,出现以下错误:

main.c:4:10: error: initializer element is not constant
 int *arr=(int *)malloc(5*sizeof(int));
          ^

我在 Dev-C++ 上试过这个,但没有这样的错误中断编译。错误是什么意思,为什么它特定于 GCC?

4

2 回答 2

4

在文件范围内声明的变量必须具有编译时常量的初始化程序。函数调用被视为可执行代码,不能存在于函数之外。

处理此问题的最佳方法是将指针初始化为 NULL 并mallocmain函数中执行。

您没有看到 DEV-C++ 错误的原因是因为它是 C++ 编译器,并且 C++ 允许使用函数调用初始化文件范围变量。

于 2019-10-01T15:55:45.930 回答
1

您不能在 C 中使用非常量表达式初始化具有静态存储持续时间的变量(但这可以在 C++ 中完成)。

因此,您需要将指针的声明及其初始化与动态分配的内存地址分开。

于 2019-10-01T15:54:17.797 回答