Помоги устранить ошибку - 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. Список действий:

  1. Выполняется итерация по числу nn.
  2. Для каждого значения i происходит выделение памяти под массив A типа float с помощью функции malloc.
  3. В каждой итерации, в выделенную память записывается адрес первого элемента массива A.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы