Ошибка при инициализации глобального указателя на динамическую память - PullRequest
2 голосов
/ 01 октября 2019

Я писал программу, которая включает 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?

Ответы [ 2 ]

4 голосов
/ 01 октября 2019

Переменные, объявленные в области видимости файла, должны иметь инициализаторы, которые являются константами времени компиляции. Вызов функции считается исполняемым кодом и не может существовать вне функции.

Лучший способ справиться с этим - инициализировать указатель на NULL и выполнить malloc в функции main.

Причина, по которой вы не видите ошибки в DEV-C ++, заключается в том, что это компилятор C ++, а C ++ позволяет инициализировать переменные области файла с помощью вызовов функций.

1 голос
/ 01 октября 2019

Вы не можете инициализировать переменные со статической продолжительностью хранения с помощью неконстантных выражений в C (но это может быть сделано в C ++).

Поэтому вам нужно разделить объявление указателя и его инициализацию с помощьюадрес динамически выделяемой памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...