Всем привет. Писал такую прогу на C++, компилил через g++. Запускал, пробовал задавать размер матрицы 2, выводились 3 матрицы, хотя printmatrix в проге только 2 раза. Правда, вторая матрица совпадает с первой, т. е. это введённая матрица. Да и значения в третьей матрице должны быть не такие. Но главный вопрос не в этом. Дело в том, что при размере матрицы, начиная с 3-ёх выводится только введённая матрица и вылезает ошибка сегментирования. Насколько я знаю, она появляется, при попытке доступа к запрещённым участкам памяти. Но что конкретно не так в моей проге, я не знаю. Код проги и примеры вывода приведены ниже. Please, help me.
#include<stdio.h>
#include<math.h>
int getback(bool t[], int j);
double max(double a[]);
void printmatrix(double mat[],int n);
int main()
{
int n=2;
printf("matrix size=");
scanf("%d",&n);
double *mat;
mat=new double[n*n];
bool *r;
r=new bool[n*n];
for(int i=0; i<n*n; i++)
{
r[i]=true;
}
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
printf("mat[%d][%d]=",i,j);
scanf("%le", &mat[i*n+j]);
}
}
printmatrix(mat, n);
for(int j=0; j<n; j++)
{
double max=mat[j];
bool t[n];
for(int i=j; i<j+n*(n-1); i=i+n)
{
if(mat[i]>max&&mat[i]!=0&&r[i]!=false)
{
max=mat[i];
t[i]=true;
for(int k=i-j;k<i-j+n;i++)
{
r[i]=false;
}
}
else
{
t[i]=false;
continue;
}
}
for(int i=j; i<j+n*(n-1); i=i+n)
{
mat[i]=mat[i]/max;
}
printmatrix(mat, n);
}
getchar();/*Вместо привычного getch(), т.к. на Линуксе нет <stdio.h>*/
delete mat;
delete r;
return 0;
}
/*Закончилась основная программа и начались определения функций*/
int getback(bool t[], int n)/*1*/
{
int tmax=0;
for(int i=0; i<n; i++)
{
if(t[i]==1&&i>tmax)
{
tmax=i;
}
else continue;
}
return tmax;
};
double max(double a[], int n)/*2*/
{
double m=a[0];
double t[n];
for(int i=0; i<n; i++)
{
if(a[i]>m)
{
m=a[i];
t[i]=true;
}
else
{
t[i]=false;
continue;
}
}
return m;
};
void printmatrix(double mat[], int n)/*3*/
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
if(j!=n-1)
{
printf("%3.2f\t",mat[i*n+j]);
}
else if(j==n*(n-1))
{
printf("%3.2f\n\n",mat[i*n+j]);
}
else
{
printf("%3.2f\n",mat[i*n+j]);
}
}
}
}
matrix size=2
mat[0][0]=1
mat[0][1]=2
mat[1][0]=3
mat[1][1]=4
1.00 2.00
3.00 4.00
1.00 2.00
3.00 4.00
1.00 1.00
3.00 4.00
matrix size=3
mat[0][0]=1
mat[0][1]=2
mat[0][2]=3
mat[1][0]=4
mat[1][1]=5
mat[1][2]=6
mat[2][0]=7
mat[2][1]=8
mat[2][2]=9
1.00 2.00 3.00
4.00 5.00 6.00
7.00 8.00 9.00
Ошибка сегментирования