Динамическая память в C(Си)

не так давно начал изучать язык "С". Возник вопрос, почему на 1 скрине при вводе большого числа, пропускается код с проверкой на отклонение выделения памяти + выкидывает с программы? Ввел число чуть меньше, теперь он показал содержание, но не показал псевдослучайные числа в массиве.


#include <stdio.h>
#include <stdlib.h>
#include <time.h>


int main(void) {

    srand(time(NULL));

    int allarr;
    int *arr = (int *)malloc(allarr*sizeof(int));
    printf("Enter array size: %");
    scanf("%d", &allarr);

    if(arr == NULL) {
        printf("Memory decline");
        return -1;
    }

    for(int i = 0; i < allarr; i++) {
        arr[i] = rand() % 98 + 1;
    }
    printf("array = ");
    for(int i = 0; i < allarr; i++) {
        printf(" %d ", arr[i]);
    }

    printf("\nNechet = ");

    for(int i = 0; i < allarr; i++) {
        if (arr[i] % 2 == 1) {
            printf(" %d ",arr[i]);
        }
    }
    printf("\n");


    return 0;
}

КОД 1

Изначально я подумал, что проблема как раз таки в раннем объявлении переменной. ( КОД 2 ) Только теперь при большом числе - из программы не выкидывает, а наоборот начинает грузить память, в конце концов все содержимое массива передается в консоль.


int main(void) {

    srand(time(NULL));

    int allarr;
    int *arr;
    printf("Enter array size: %");
    scanf("%d", &allarr);

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

    if(arr == NULL) {
        printf("Memory decline");
        return -1;
    }

    for(int i = 0; i < allarr; i++) {
        arr[i] = rand() % 98 + 1;
    }
    printf("array = ");
    for(int i = 0; i < allarr; i++) {
        printf(" %d ", arr[i]);
    }

    printf("\nNechet = ");

    for(int i = 0; i < allarr; i++) {
        if (arr[i] % 2 == 1) {
            printf(" %d ",arr[i]);
        }
    }
    printf("\n");


    return 0;
}

введите сюда описание изображения


Ответы (0 шт):