初始化指向动态内存的全局指针时出错

Error when initializing global pointer to dynamic memory

我正在编写一个涉及 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?

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

所以你需要把指针的声明和它的初始化与动态分配内存的地址分开。

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

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

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