Как выделить 2D-массив в C с помощью Malloc: объяснение нескольких методов

Чтобы выделить 2D-массив с помощью mallocв C, вы можете выполнить следующие действия. Я предоставлю вам несколько методов:

Метод 1: использование одного буфера

int allocate2DArray(int rows, int columns) {
    int arr = (int)malloc(rows * sizeof(int*));
    int* buffer = (int*)malloc(rows * columns * sizeof(int));
    for (int i = 0; i < rows; i++)
        arr[i] = buffer + (i * columns);
    return arr;
}

Метод 2: использование Double Malloc

int allocate2DArray(int rows, int columns) {
    int arr = (int)malloc(rows * sizeof(int*));
    for (int i = 0; i < rows; i++)
        arr[i] = (int*)malloc(columns * sizeof(int));
    return arr;
}

Метод 3: использование непрерывной памяти

int* allocate2DArray(int rows, int columns) {
    int* arr = (int*)malloc(rows * columns * sizeof(int));
    // Accessing elements: arr[row * columns + column]
    return arr;
}

Чтобы освободить выделенную память, необходимо соответствующим образом освободить ее:

Метод 1 и метод 2:

void deallocate2DArray(int arr, int rows) {
    for (int i = 0; i < rows; i++)
        free(arr[i]);
    free(arr);
}

Метод 3:

void deallocate2DArray(int* arr) {
    free(arr);
}