Tell me please where I messed up in addressing with matr?
(code corrected)
#include <time.h> #include <stdio.h> #include <stdlib.h> void scan_matr(int ***matr, int *n){ printf("Введите порядок матрицы:"); scanf("%i", n); printf("\nВведите матрицу:\n"); matr = (int**)malloc(*n * sizeof(int*)); for (int i = 0; i < *n; ++i) { matr[i] = (int*)malloc((*n+1) * sizeof(int)); } for (int i = 0; i < *n; ++i) { for (int j = 0; j < *n+1; ++j) { scanf("%i",&(matr[i][j])); } puts(""); } } int* solveGauss(int **matr, int *n) { int *vectors; vectors = malloc(*n * sizeof(int)); for (int k = 1; k < *n; ++k) { for (int j = k; j < *n; ++j) { int a = matr[j][k-1]; int b = matr[k-1][k-1]; int m = a/b; for (int i = 0; i < *n+1; ++i) { matr[j][i] = matr[j][i] - m*matr[k-1][i]; } } } for (int i = *n-1; i >= 0 ; --i) { vectors[i] = matr[i][*n]/matr[i][i]; for (int c = n-1; c > i; --c) { vectors[i] = vectors[i] - matr[i][c] * vectors[c] / matr[i][i]; } } return vectors; } int main() { int **matr, n; scan_matr(matr,&n); int *vectors = solveGauss(&matr,&n); return 0; }
w * h, and then instead ofmat[x][y]domat[x + y*w]. - HolyBlackCatfor (int c = 0; c > i; --c) { vectors[i] = vectors[i] - matr[i][c] * vectors[c] / matr[i][i];}most likely the initial number should not be zero. - AlexGlebe