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