Чтобы выделить 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);
}