Двумерный динамический массив в C/C++

Пример двумерного динамического массива. Этот пример скорее больше подходит для классического Си, но принцип создания динамического двумерного массива в этом примере достаточно прозрачен, что позволяет на его основе использовать, скажем, операторы потоков ввода-вывода cin и cout. Функция realloc(), которая использована в листинге программы, может быть использована для увеличения уже выделенного участка памяти, а для освобождения памяти может быть использована функция free().

Прототипы функций для работы с динамической памятью, расположенные в модуле stdlib:

#include <stdlib.h>
void *malloc (size_t size);
void *calloc (size_t num, size_t size);
void *realloc(void *block, size_t size);
void *free(void *block);

Собственно, сам пример программы:

#include <stdio.h>
#include <stdlib.h>
void main()
{
// *** Variables ***

int** ArrayRoot;
int i,j;
int LinesCount,NumbersCount;

// *** Program code ***

// Input size of array
printf("Enter count of lines: ");
scanf("%d",&LinesCount);
printf("Enter count of numbers in line: ");
scanf("%d",&NumbersCount);

// Print entered size
printf("Array size: %dx%d\n",LinesCount,NumbersCount);

// Create array of int* - allocate memory
ArrayRoot= (int **)malloc(sizeof(int*)*LinesCount);

// for every pointer to int
for (i=0;i<LinesCount;i++){
  // Allocate memory for array line of integers
  ArrayRoot[i]=(int *)malloc(sizeof(int)*NumbersCount);
  // Get array numbers
  for(j=0;j<NumbersCount;j++){
    printf("Enter Array [%d,%d]: ",i,j);
    // Enter all the integers in array
    scanf("%d",&ArrayRoot[i][j]);
  };
};

for (i=0;i<LinesCount;i++){
  for(j=0;j<NumbersCount;j++){
    // Print out the integers from array
    printf("Array [%d,%d]: %d\n",i,j,ArrayRoot[i][j]);
  };
};

// Free memory

for (i=0;i<LinesCount;i++){
  // Clear memory used by lines
  ArrayRoot[i]=(int *)realloc(ArrayRoot[i],0);
};

// Clear memory user by pointer to integer pointers
ArrayRoot=(int **)realloc(ArrayRoot,0);
}

Результат работы программы:

Enter count of lines: 3
Enter count of numbers in line: 2
Array size: 3x2
Enter Array [0,0]: 1
Enter Array [0,1]: 2
Enter Array [1,0]: 3
Enter Array [1,1]: 4
Enter Array [2,0]: 5
Enter Array [2,1]: 6
Array [0,0]: 1
Array [0,1]: 2
Array [1,0]: 3
Array [1,1]: 4
Array [2,0]: 5
Array [2,1]: 6

Licensed under GPL v2

Repo link: https://github.com/mnorin/mnorin.github.io