[EMAIL PROTECTED] wrote:
> Hey All:
>
> Is there a way we can avoid Segmentation fault error when we try to free a
> gsl_matrix that was never allocated, or that has already been freed? 
>   
If you don't allocate the matrix b when you declare it, try using

gsl_matrix b = 0;

Then you can free it using

if( b != 0 ){
    gsl_matrix_free( b );
    b = 0;
}

without worrying about whether b was allocated or already freed. This is
a standard technique and useful when you have conditional blocks of code
that may or may not allocate or free the matrix. If you want some
debugging information you can add an else to the delete block:

else {
    // print some message about b not being allocated.
}

There are three likely reasons for gsl_matrix_free failing. First, you
may have bugs in your code. In that case you might try printing a
message whenever b is allocated or deleted or running a debugger that
traces what happens to b. Second, you may have b allocated
conditionally. The code above deals with this. Third, gsl_matrix_alloc
or gsl_matrix_free could fail for reasons not related to the first two.
Exceptions are only really designed to handle the third case.

-- 
JDL



_______________________________________________
Help-gsl mailing list
Help-gsl@gnu.org
http://lists.gnu.org/mailman/listinfo/help-gsl

Reply via email to