#include <malloc.h>
#include <stdio.h>
#include <locale.h>
#include <time.h>
#include <stdlib.h>
int ** generateArrayOf(
int n
, int m
, int min
, int max
) {
int **array = NULL;
if ( NULL != (array = (int**)malloc(m * sizeof(int*)) ) ) // обязательно проверить что память была выделена
{
int i = 0, j = 0;
srand(time(NULL));
for (i = 0; i < n; i++) // цикл по строкам
{
if ( NULL != ( array[i] = (int*)malloc(n * sizeof(int)) ) ) // тоже самое
{
for (j = 0; j < m; j++)
{
array[i][j] = rand() % (max - min + 1) + min;
}
}
}
}
return array;
}
int main () // тип возвращаемого значения (int) должен присутствовать
{
int n=0, m=0, x=0, y=0, min=0, max=0; // необходимо инициализировать все создаваемые переменные
setlocale(LC_ALL,"Russian");
printf("Введите нижний диапазон:");
scanf("%i",&x);
min=-1*x; // для улучшения читаемости кода, показываем сразу где используется вводимое значение
printf("Введите верхний диапазон:");
scanf("%i",&y);
max=y;
printf ("Ввод размерности двумерного массива:\n");
printf("Введите количество строк:");
printf("n=");
scanf("%i",&n);
printf("Введите количество столбцов:");
printf("m=");
scanf("%i",&m);
{
int **a = generateArrayOf(n, m, min, max);
if ( NULL != a )
{
int i=0, j=0; // заводим переменные в начале блока, непосредственно перед использованием
printf ("Вывод двумерного массива:\n");
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
printf (" %d ", a[i][j]);
}
printf ("\n");
}
// в изначальном коде ошибки: free( a[i][j]) - во первых не верный тип,
// а во вторых чему будет равен j ))))
// надо так:
for (i=0;i<n;i++) { if (NULL != a[i]) free(a[i]); }
free(a);
}
}
getchar();
return 0;
}