Witam wszystkich bardzo serdecznie. Znów mam problem z jednym z programów. Liczy on wyznacznik. Bez klas działa on dobrze, jednak gdy podzielę go na klasy, wyskakuje błąd segmentation fault(core dumped) 139(0x8B). Wiem, że odwołuję się poza tablicę, kieruję się na nieistniejący wskaźnik, jednak nie wiem w którym miejscu jest ten wskaźnik.
Wszystko wrzucam do jednego pliku
#include <iostream>
#include <time.h>
#include <math.h>
#include <stdlib.h>
#include<gmpxx.h>
#include<gmp.h>
using namespace std;
class metody{
public:
float** tab;
int N;
void losowanie(int);
void macierz_trojkatna(float**, int);
};
void metody::losowanie(int N){
float** tab;
int i,j;
cout<<"podaj rozmiar macierzy ";
cin>>N;
time_t t;
srand((unsigned) time(&t));
tab=new float *[N];
cout<<"zawartosc macierzy"<<endl<<endl;
for(i=0;i<N;i++) tab[i]=new float[N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
tab[i][j]=rand()%100;
cout<<tab[i][j]<<" ";
if(j==N-1)cout<<endl;
}
}
void metody::macierz_trojkatna(float **tab, int N){
// tworzenie macierzy trojkatnej
int i,j,k;
for (k=0; k<N-1; k++)
{
for (i=k+1; i<N; i++)
for (j=N-1; j>=k; j--)
tab[i][j] = tab[i][j] - tab[i][k]*tab[k][j]/tab[k][k];
}
if (N<=3) {
float det = 1.0;
//tu wyliczamy wyznacznik po przekątnej
for (i=0; i<N; i++) det = det * tab[i][i];
cout<<endl<<"wyznacznik wynosi "<<det<<endl;
cout<<"aby zakonczyc nacisnij dowolny klawisz ";
}
else if (N>=4 and N<=100){
mpz_class det = 1.0;
for (i=0; i<N; i++) det = det * tab[i][i];
cout<<endl<<"wyznacznik wynosi "<<det<<endl;
cout<<"aby zakonczyc nacisnij dowolny klawisz ";}
else if (N>100){
mpq_class det = 1.0;
for (i=0; i<N; i++) det = det * tab[i][i];
cout<<endl<<"wyznacznik wynosi "<<det<<endl;
cout<<"aby zakonczyc nacisnij dowolny klawisz ";
}
for (int i = 0; i < N; i++) delete [] tab[i];
delete tab;
}
int main()
{
float** tab;
int N;
int x;
metody wyznacznik;
wyznacznik.losowanie(x);
wyznacznik.macierz_trojkatna(tab,x);
cin.sync();
cin.get();
return 0;
}
Dziękuję za pomoc i proszę o wyrozumiałość.