Программа зацикливается при вводе матрицы - C (СИ)
Формулировка задачи:
Здравствуйте. Помогите, в программе какая то ошибка, не могу найти. Почему-то зацикливается при вводе матрицы.
#include <stdio.h>
#include <stdlib.h>
void InitMem(int** A,int M, int N)
{
int x;
A = (int **) calloc(M,sizeof (int *));;
for(x = 0; x < M; x++)
A[x] = (int *) calloc(N, sizeof (int));
return A;
}
void FreeMem(int** A, int M)
{
int i ;
for(i= 0; i < M; i++)
free(A[i]);
free(A);
}
void ReadMatr1 (int *A[], int M, int N)
{
int i, j;
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
scanf ("%d", &A[i][j]);
}
return 0;
}
void WriteMatr(int *A[], int M, int N)
{
int i,j;
for(i=0; i<M; i++)
{
for(j=0; j<N; j++)
printf("%i ",A[i][j]);
printf(" \n");
}
printf("\n");
return 0;
}
void main()
{
int i,j, **A;
int M, N;
printf("vved M-stroki ");
scanf("%d",&M);
printf("vved N-stolbtci ");
scanf("%d",&N);
InitMem(A,M,N);
if (A!=NULL )
{
printf ("vvedite matritcu a: \n");
ReadMatr1(A,M,N);
WriteMatr(A, M, N);
FreeMem(A,M);
}
else printf("not mem");
}Решение задачи: «Программа зацикливается при вводе матрицы»
textual
Листинг программы
int** InitMem(int M, int N)
{
int x, **A;
A = (int **) calloc(M,sizeof (int *));;
for(x = 0; x < M; x++)
A[x] = (int *) calloc(N, sizeof (int));
return A;
}
Объяснение кода листинга программы
В данном коде представлена функция InitMem, которая занимается инициализацией динамической памяти для двумерного массива (матрицы) целых чисел.
- В первой строке объявлены две переменные:
xиA. - Переменная
Aинициализируется как указатель на указатель на целочисленную переменную. - Затем, с помощью функции
calloc, выделяется память под массив указателей на целочисленные переменные. - В цикле
forпроисходит инициализация каждого указателя в массивеAс помощью функцииcalloc. - В конце функции, возвращается инициализированный массив
A.