Hello, all!! Tonight i was trying to make a c++ class for working with gsl_complex matrices. But when i compiled my program, i got segmentation fault error :( The code was built on the mac os x lion and debian 6 stable, but the result was the same. Can you help me, what's wrong with my code?
Thanks a lot, Vladimir. [CODE] #include <iostream> #include <gsl/gsl_matrix.h> #include <gsl/gsl_blas.h> #include <gsl/gsl_complex.h> #include <gsl/gsl_complex_math.h> #include <gsl/gsl_rng.h> #include <gsl/gsl_linalg.h> using namespace std; class matrix { gsl_matrix_complex *mtrx; public: size_t rows; size_t cols; matrix(); matrix(const size_t r, const size_t c); ~matrix(); matrix(const matrix &rhs); matrix operator=(const matrix &rhs); matrix operator+(const matrix &rhs); matrix operator-(const matrix &rhs); matrix operator*(const matrix &rhs); void print(); void randomize(); matrix inverse(); gsl_complex &at(size_t r, size_t c); }; matrix::matrix() { mtrx = gsl_matrix_complex_alloc(1, 1); rows = cols = 1; cout << "Created uninitialised default 1x1 matrix\n"; } matrix::matrix(const size_t r, const size_t c) { mtrx = gsl_matrix_complex_alloc(r, c); rows = r; cols = c; cout << "Created uninitialised " << rows << "x" << cols << " matrix\n"; } matrix::~matrix() { gsl_matrix_complex_free(mtrx); cout << "The matrix has been deallocated\n"; } matrix::matrix(const matrix &rhs) { mtrx = gsl_matrix_complex_alloc(rhs.rows, rhs.cols); rows=rhs.rows; cols=rhs.cols; int a = gsl_matrix_complex_memcpy(mtrx, rhs.mtrx); cout << a << " - the code, returned by copy constructor (0=Success)\n"; } matrix matrix::operator=(const matrix &rhs) { gsl_matrix_complex_memcpy(mtrx, rhs.mtrx); return *this; } matrix matrix::operator+(const matrix &rhs) { matrix temp(rows, cols); temp = *this; gsl_matrix_complex_add(temp.mtrx, rhs.mtrx); return temp; } matrix matrix::operator-(const matrix &rhs) { matrix temp(rows, cols); temp = *this; gsl_matrix_complex_sub(temp.mtrx, rhs.mtrx); return temp; } matrix matrix::operator*(const matrix &rhs) { matrix temp(rows, rhs.cols); gsl_blas_zgemm(CblasNoTrans, CblasNoTrans, gsl_complex_rect(1.0, 0.0), mtrx, rhs.mtrx, gsl_complex_rect(0.0, 0.0), temp.mtrx); return temp; } void matrix::print() { gsl_matrix_complex_fprintf(stdout, mtrx, "%f"); } void matrix::randomize() { const gsl_rng_type *T; gsl_rng *r; T = gsl_rng_taus2; r = gsl_rng_alloc(T); for (size_t n=0; n<rows; n++) { for(size_t m=0; m<cols; m++) { this->at(n,m)=gsl_complex_rect((double)gsl_rng_get(r)*0.0000001, (double)gsl_rng_get(r)*0.0000001); } } gsl_rng_free(r); } matrix matrix::inverse() { int *signum; gsl_permutation *p; p = gsl_permutation_alloc(rows); matrix temp = *this; matrix temp_inv(rows, cols); gsl_linalg_complex_LU_decomp(temp.mtrx, p, signum); temp.print(); gsl_linalg_complex_LU_invert(temp.mtrx, p, temp_inv.mtrx); return temp_inv; } gsl_complex &matrix::at(size_t r, size_t c) { gsl_complex *p; p = gsl_matrix_complex_ptr(mtrx, r, c); if(p!=0) return *p; } int main (int argc, const char * argv[]) { matrix b(3,3); b.randomize(); b.inverse(); return 0; } [/CODE] _______________________________________________ Help-gsl mailing list Help-gsl@gnu.org https://lists.gnu.org/mailman/listinfo/help-gsl