初始化指向动态内存的全局指针时出错
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++ 允许使用函数调用初始化文件范围变量。
我正在编写一个涉及 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++ 允许使用函数调用初始化文件范围变量。