При вызове функции программа аварийно завершает работу - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите, пожалуйста, разобраться, что я делаю не так. При вызове функции программа аварийно завершает работу:
#include <stdio.h>
#include <stdlib.h>
 
 void Gauss (double **A, int n, double *b)
 {
     int i, j, k;
     double d, *z;
     for (i=0; i<n-1; i++)
     {
 
         d=fabs(A[i][j]);
         k=i;
         for (j=i+1; j<n; j++)
            if (d<fabs(A[j][i]))
         {
             d=fabs(A[j][i]);
             k=j;
         }
         if (k!=j)
         {
             z=A[i];
             A[i]=A[k];
             A[k]=z;
         }
         for (k=i+1; k<n; k++)
         {
             d=A[k][j]/A[i][i];
             for (j=i; j<=n; j++)
             {
                 A[k][j]-=A[i][j]*d;
             }
         }
     }
 }
 
int main ()
{
  int i, j, N, s=-1;
 
  printf("n = ");
  scanf("%d", &N);
  double a[N][N];
  double B[N];
 
  for (i=0; i<N; i++)
  {
    for (j=0; j<N; j++){
      a[i][j]=rand()%5;
      printf ("%.2fl \t", a[i][j]);
    }
    printf ("\n");
  }
 
  printf ("\n");
  for (i=0; i<N; i++)
  {
      B[i]=rand()%5;
      printf ("%.2fl \t", B[i]);
  }
 
  Gauss(a, N, B);
}

Решение задачи: «При вызове функции программа аварийно завершает работу»

textual
Листинг программы
for(i=0; i<N; i++) free(a[i]);
free(a);

Объяснение кода листинга программы

  1. В коде есть два действия, которые выполняются последовательно:
    • Первое действие: для каждого элемента массива a от индекса 0 до N-1 включительно вызывается функция free().
    • Второе действие: освобождается память, выделенная под массив a.
  2. Переменная i является счетчиком цикла и инициализируется значением 0.
  3. Переменная N является количеством элементов в массиве a.
  4. Массив a состоит из элементов типа void*, которые были выделены динамически с использованием функции malloc().
  5. В цикле, начиная с первого элемента массива a и до элемента с индексом N, каждый элемент освобождается с помощью функции free().
  6. После завершения цикла, память, выделенная под массив a, освобождается с помощью функции free().

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


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

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

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