Re: Strange glibc detected invalid pointer with gtk_entry



hi;

On 5 July 2011 20:14,  <zz excite it> wrote:
On Tuesday 05 July 2011 16:19:00 Emmanuele Bassi wrote:
On 2011-07-05 at 15:05, zz excite it wrote:
void my_gtk_entry_set_text(GtkEntry *entry, char *data)
{
  char *tmp;

  if (!data) data = "";

  if (g_utf8_validate(data, -1, NULL) != TRUE) {
      tmp = g_locale_to_utf8(data, -1, NULL, NULL, NULL);
      gtk_entry_set_text(entry, tmp);
      xfree(&tmp);
        ^^^^^^^^^^^^

agh!

g_locale_to_utf8() returns memory allocated through the GLib API; you
need to call g_free() to free it. *do not* mix GLib's memory allocation
functions with other allocation functions.

Hi,
to be honest :-) I'm doing this for a long time and never experienced problems.

sheer luck.

Cannot imagine glib calling something different than malloc/calloc/realloc at the low level

they might, but the allocation/deallocation functions can be replaced:

  http://developer.gnome.org/glib/stable/glib-Memory-Allocation.html

so unless there are some special profiler or debug functions free should be ok or at least
it for me worked flawlessly in linux and windows. I think there must be more than a simple no-no.
Thanks for your hint will try to correct this bad habit in the future.
To fix my code a simple

#define malloc g_malloc
#define free   g_free
#define calloc Âg_calloc
#define realloc g_realloc

should do it. Right?

no, don't do that. it's awful, and it'll mask debugging and compiler warnings.

just fix the code; the 5 minutes of work will avoid issues further
down the road.

ciao,
 Emmanuele.

-- 
W: http://www.emmanuelebassi.name
B: http://blogs.gnome.org/ebassi/



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