Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Char** to String

Estas en el tema de Char** to String en el foro de C/C++ en Foros del Web. Hola a todos!. Estoy realizando un soft bajo C++ en Linux, donde tengo que comprobar los procesos que están corriendo en el sistema. En caso ...
  #1 (permalink)  
Antiguo 16/06/2009, 04:38
 
Fecha de Ingreso: octubre-2003
Mensajes: 162
Antigüedad: 20 años, 6 meses
Puntos: 0
Char** to String

Hola a todos!.

Estoy realizando un soft bajo C++ en Linux, donde tengo que comprobar los procesos que están corriendo en el sistema. En caso de que los encuentre, tengo que devolver una lista de ellos.

Para ello, hago uso de las libgtop de gnome, map de STL y alguna cosilla mas...

El caso, que en el apartado donde voy comprobando la lista de procesos y sus argumentos, los voy guardando en una variable tipo String, mas o menos de esta forma:

string Lista
char ** argv = glibtop_get_proc_argv(....);
char ** cur_arg = argv;

while(cur_arg)
Lista += cur_arg;

A partir de aquí, con la variable Lista realizo busquedas en los maps y bla bla...

El caso, que el pasar de "Lista += cur_arg;" me da un memory leak acojonante, me lo reporta vallgrind y yo veo que sube como la espuma...

¿¿¿Hay alguna que otra forma de hacer la conversión de char** a String???

Muchas gracias por la ayuda!.
  #2 (permalink)  
Antiguo 17/06/2009, 01:29
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Char** to String

El leak es por esto: Remember to `g_strfreev' the returned array to avoid a memory leak.

http://blogninja.com/cgi-bin/info2ww...btop_proc_args

El codigo no compila (no podes pasarle un doble puntero a char al operador +=), le tenes que pasar un puntero a char (una cadena):

Código:
while(*cur_arg)
{
  Lista += *cur_arg++;
}
g_strfreev(argv);

Ojo que asi todas las palabras estaran JUNTAS, tenes que meter un espacio para que queden bien, eso te lo dejo a vos.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 17/06/2009, 02:07
 
Fecha de Ingreso: octubre-2003
Mensajes: 162
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Char** to String

Pues va a ser que el memory leak no estaba en esa convesión, si no en una parecida que hacía un línea mas abajo.

El caso, que si quieres hacer algo así:

string Lista
char ** argv = glibtop_get_proc_argv(....);
char ** cur_arg = argv;

while(cur_arg)
Lista += g_path_get_basename(*cur_arg);

Es en la asignación de donde está negrita lo que genera el memory leak. Basta con generar una variable internmedia
gchar * hola = g_path_get_basename(*cur_arg);
Lista.assign(hola);
g_free(hola);

Y listo...

Gracias a todos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:18.