Pregunta

Estoy utilizando g_object_set_data para establecer el nombre de usuario con event_box por lo que en la llamada hacia atrás puedo conseguirlo con puntero event_box.

g_object_set_data(G_OBJECT(event_box), "user_name", (gpointer)(user_name) );

Pero el problema es que yo soy la creación nombre_usuario que no es una cadena asignada puntero.
Es una cadena local (no asignado en la cadera), que se destruye.

Por lo que es necesario asignado y luego usar el puntero, sólo quiero a nombre de un asociado con este event_box.

¿Fue útil?

Solución

Usar el código siguiente:

g_object_set_data_full (G_OBJECT (event_box),
                        "user_name",
                        g_strdup (user_name),
                        (GDestroyNotify) g_free);

De esta manera la cadena será duplicado en el montón y la copia será obtener liberados automáticamente cuando event_box se destruye.

Otros consejos

Sí, ya que los datos almacenados en la GObject es sólo un puntero normal, no puede hacer la gestión de memoria para usted.

Sólo tiene que llamar g_strdup() sobre la cuerda, y guardar el resultado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top