Jochen Küpper wrote:
>> gsl_matrix_alloc and gsl_matrix free behave like alloc and free and
>> so I guess gsl_matrix_alloc returns 0 on failure and gsl_matrix_free
>> should not be called with a null pointer.
>>
>
> Actually it should be ok to call free with NULL, just not with any
> other invalid pointer:
>
> ,----[man free]
> | free() frees the memory space pointed to by ptr, which must have
> been
> | returned by a previous call to malloc(), calloc() or realloc().
> Otherwise,
> | or if free(ptr) has already been called before, undefined behaviour
> occurs.
> | If ptr is NULL, no operation is performed.
> `----
>
Thanks. Somehow I'd never noticed, probably because I mostly use C++,
where delete 0 has no effect, and so seldom worry about malloc and free.
I checked the source code for gsl_matrix_free and it will fail if passed
a null pointer. In other words
gsl_matrix* p = 0;
free( p );
is correct (if pointless) code, but
gsl_matrix* p = 0;
gsl_matrix_free( p );
will always create a segmentation fault. Hence, in more complex code,
its still useful to write
if( p != 0 ){
gsl_matrix_free( p );
p = 0;
}
--
JDL
_______________________________________________
Help-gsl mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-gsl