They're definitely not equivalent. Specifically:

> If varA is defined as a const gchar *, will the program automatically free the
> memory allocated with g_strdup ?

No. If you use strdup (or malloc, etc.), you need to free the resulting pointer
afterwards.

const on a pointer just means that you shouldn't modify the memory that the
pointer points to. This is more useful when you use string constants. In C, this
isn't strictly enforced, but in C++ it is. See also
http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html .

Jethro

On 22-12-12 12:51, Geert Janssens wrote:
> And now a question to show that I never had a formal c/c++ education.
> 
> Are the below functions equivalent ?
> 
> void funcA ()
> {
>     gchar *varA = g_strdup ("Test");
>     <do something with a>
>    g_free (varA);
> }
> 
> and
> 
> 
> void funcA ()
> {
>     const gchar *varA = g_strdup ("Test");
>     <do something with a>
> }
> 
> I'm mostly wondering if the second function would have a memory leak or not. 
> If
> varA is defined as a const gchar *, will the program automatically free the
> memory allocated with g_strdup ?
> 
> I don't expect so, but I'm seeing mixed uses in GnuCash and want to determine
> for once and for all what is the proper way to handle this.
> 
> Geert
> _______________________________________________
> gnucash-devel mailing list
> gnucash-devel@gnucash.org
> https://lists.gnucash.org/mailman/listinfo/gnucash-devel
> 
_______________________________________________
gnucash-devel mailing list
gnucash-devel@gnucash.org
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to