Помоги устранить ошибку - C (СИ)
Формулировка задачи:
Есть программа для нахождения обратной матрицы. Я сделал так что бы пользователь вводил размерность этой матрицы и программа выделяла память под массив в зависимости от этой размерности. Видимо на этапе выделения памяти я сделал что то не правильно и компилятор Visual Studio пишет: Unhandled exception at 0x00a03eba in abd.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd. Помогите пожалуйста решить данную проблему. Вот код программы
int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL, "Russian"); int nn,i,j; printf("Введите размерность матрицы:"); scanf("%d", &nn); float **A=0, **L=0; A=(float**)malloc(sizeof(float*)*nn); L=(float**)malloc(sizeof(float)*nn); for(int i=0; i<nn; i++) { A[i]=(float*)malloc(sizeof(float)*nn); } for(int i=0; i<nn; i++) //Поэлементный ввод матрицы: for (i=0; i<nn; i++) for (j=0; j<nn; j++) { printf("\nЭлемент [%d,%d]: ", i+1, j+1); float k; scanf("%f", &k); A[i][j] = k; } //Создание единичной матрицы: for (i=0; i<nn; i++) for (j=0; j<nn; j++) if (i!=j) L[i][j]=0; else L[i][j]=1; j = 0; int m=0; int n; do { // Выбор ведущего элемента ниже элемента [j,j-1]: m = j; for (n=j+1; n<nn; n++) if (fabs(A[m][j])<fabs(A[n][j])) m = n; float prm=0; //Переобразования над матрицей А: for (n=0; n<nn; n++) prm = A[j][j]; for (n=0; n<nn; n++) { A[j][n] = float (A[j][n]/prm); L[j][n] = float (L[j][n]/prm); } for (i=0; i<=nn; i++) if (i!=j) { prm = A[i][j]; for (n=j; n<=3; n++) A[i][n] = A[i][n]- float (prm*A[j][n]); for (n=0; n<=3; n++) L[i][n] = L[i][n]- float (prm*L[j][n]); } j++; } while (j<nn); //Вывод на экран обратной матрицы: printf("\nОбратная матрица:\n"); for (i=0; i<nn; i++) for (j=0; j<nn; j++) { if (j==0) printf("\n"); else printf("\t"); printf("%f", L[i][j]); } getch(); **A=0, **L=0, free(L); free(A); return 0; }
Решение задачи: «Помоги устранить ошибку»
textual
Листинг программы
for(int i=0; i<nn; i++) { A[i]=(float*)malloc(sizeof(float)*nn); }
Объяснение кода листинга программы
В данном коде происходит выделение памяти под массив A типа float с помощью функции malloc. При этом, для каждого элемента массива A также выделяется память под один float. После выделения памяти, в неё записывается адрес первого элемента массива A. Список действий:
- Выполняется итерация по числу nn.
- Для каждого значения i происходит выделение памяти под массив A типа float с помощью функции malloc.
- В каждой итерации, в выделенную память записывается адрес первого элемента массива A.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д