При вызове функции программа аварийно завершает работу - 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);
Объяснение кода листинга программы
- В коде есть два действия, которые выполняются последовательно:
- Первое действие: для каждого элемента массива
aот индекса 0 до N-1 включительно вызывается функция free(). - Второе действие: освобождается память, выделенная под массив
a.
- Первое действие: для каждого элемента массива
- Переменная
iявляется счетчиком цикла и инициализируется значением 0. - Переменная
Nявляется количеством элементов в массивеa. - Массив
aсостоит из элементов типа void*, которые были выделены динамически с использованием функции malloc(). - В цикле, начиная с первого элемента массива
aи до элемента с индексом N, каждый элемент освобождается с помощью функции free(). - После завершения цикла, память, выделенная под массив
a, освобождается с помощью функции free().