Как правильно объявить двумерный динамический массив через malloc - C (СИ)
Формулировка задачи:
Подскажите как правильно объявить двумерный динамический массив через malloc типа инт размером 100х100?
Решение задачи: «Как правильно объявить двумерный динамический массив через malloc»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define SZ 100 // размер квадратной матрицы
//функция заполняет матрицу псевдослучайными данными
void FillMatrix( int** matrix, const int size, const unsigned randRange, const int shift );
//функция печатает матрицу
void PrintMatrix( int** matrix, const int size );
int main( void ) {
// объявляем нашу матрицу как указатель на int и выделяем необходимую память для нее
int** a = ( int** ) malloc( SZ * sizeof(int*) );
int i;
for ( i = 0; i < SZ; ++i )
a[ i ] = ( int* ) malloc( SZ * sizeof(int) );
// заполняем матрицу псевдослучайными данными типа int
FillMatrix( a, SZ, 100, 0 );
// выводим матрицу на экран
puts( "Исходная матрица" );
PrintMatrix( a, SZ );
// освобождаем память, выделенную под матрицу
for ( i = 0; i < SZ; ++i )
free( a[ i ] );
free( a );
return EXIT_SUCCESS;
}
void FillMatrix( int** matrix, const int size, const unsigned randRange, const int shift ) {
int i, j;
for ( i = 0; i < size; ++i )
for ( j = 0; j < size; ++j )
// заполняем квадратную матрицу псевдослучайными данными
// shift - начальное значение диапазона данных
// randRange - ширина диапазона
matrix[ i ][ j ] = shift + rand() % randRange;
}
void PrintMatrix( int** matrix, const int size ) {
int i, j;
for ( i = 0; i < size; ++i ) {
for ( j = 0; j < size; ++j )
printf( "%4d ", matrix[ i ][ j ] );
puts( "" );
}
}