Программа зацикливается при вводе матрицы - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д