В C в чем разница между двумя приведенными фрагментами кода, относящимися к mallo c и объявлением массива переменных? - PullRequest
1 голос
/ 08 февраля 2020

Делают ли приведенные ниже коды одно и то же?

Фрагмент кода 1:

#include <stdio.h>
int main(void){
    int size;
    scanf("%d", &size);
    int arr[size];
    //code to manipulate array
    return 0;
}

Фрагмент кода 2:

#include <stdio.h>
int main(void){
    int size;
    scanf("%d", &size);
    int *arr = malloc(size*sizeof(int));
    //code to manipulate array
    free(arr);
    return 0;
}

1 Ответ

1 голос
/ 08 февраля 2020

Это не одно и то же.

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

...