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 Help-gsl@gnu.org http://lists.gnu.org/mailman/listinfo/help-gsl