Hello!
Ktoś powie , gdzie w tym kodzie mam błąd , bo pisze mi : Zgłoszono wyjątek: naruszenie dostępu do odczytu.
x było 0x1110112.
double * gauss(double **a, double *y, int n)
{
double *x, max;
int k, index;
const double eps = 0.00001;
x = (double*)malloc(sizeof(double)* n);
k = 0;
while (k < n)
{
max = fabs(a[k][k]);
index = k;
for (int i = k + 1; i < n; i++)
{
if (fabs(a[i][k]) > max)
{
max = fabs(a[i][k]);
index = i;
}
}
if (max < eps)
{
printf("Zerowa kolumna - error ");
printf("%d macierzy A\n", index);
return 0;
}
for (int j = 0; j < n; j++)
{
double temp = a[k][j];
a[k][j] = a[index][j];
a[index][j] = temp;
}
double temp = y[k];
y[k] = y[index];
y[index] = temp;
for (int i = k; i < n; i++)
{
double temp = a[i][k];
if (fabs(temp) < eps) continue;
for (int j = 0; j < n; j++)
a[i][j] = a[i][j] / temp;
y[i] = y[i] / temp;
if (i == k) continue;
for (int j = 0; j < n; j++)
a[i][j] = a[i][j] - a[k][j];
y[i] = y[i] - y[k];
}
k++;
}
for (k = n - 1; k >= 0; k--)
{
x[k] = y[k];
for (int i = 0; i < k; i++)
y[i] = y[i] - a[i][k] * x[k];
}
return x;
}
int main()
{
double **a, *y, *x;
int n;
system("chcp 1251");
system("cls");
printf("Wpisz ilosc rownan ");
scanf("%d", &n);
a = (double**)malloc(n * sizeof(double));
y = (double*)malloc(sizeof(double)* n);
x = (double*)malloc(sizeof(double)* n);
for (int i = 0; i < n; i++)
{
a[i] = (double*)malloc(sizeof(double)* n);
for (int j = 0; j < n; j++)
{
printf("a[%d][%d]= ", i, j);
scanf("%d", &a[i][j]);
}
}
for (int i = 0; i < n; i++)
{
printf("y[%d]= ", i);
scanf("%d", &y[i]);
}
x=gauss(a, y, n);
for (int i = 0; i < n; i++) {
printf("x[%d]= %d", i, x[i]);
printf("\n");
}
getchar();
getchar();
return 0;
}
Ten błąd wypisuje mi w tym miejscy (rozumiem , że problem jest w odnalezieniu tej tablicy, ale nie mam pojęcia gdzie mam źle):
printf("x[%d]= %d", i, x[i]);