help-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Help-gsl] Re: free


From: John D Lamb
Subject: [Help-gsl] Re: free
Date: Sun, 11 Jun 2006 19:20:12 +0100
User-agent: Thunderbird 1.5 (X11/20060317)

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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]