IIC2333 / foro-2019-1

Foro oficial del curso IIC2333 - Sistemas Operativos y Redes, semestre 2019-1.
2 stars 0 forks source link

Problema entendiendo Valgrind #13

Closed JIGutierrez closed 5 years ago

JIGutierrez commented 5 years ago

Hola! Un pedazo de mi programa funciona asi...

while(...)
  char* process_name = malloc(255);
  ...
  //leo process_name del archivo
  //inicio un process p
  ...
  p->name = process_name;

Mi idea es poder cargarlo, y luego, en otra funcion, hago

free(p->name);

Sin embargo, valgrind me dice que se perdieron 255 bytes (entre otros) en la primera funcion, y, logicamente, si hago free(process_name) me salen errores en todos lados.

Que estoy haciendo mal? Gracias de antemano :)

Geeermy commented 5 years ago

¡Hola!

El problema, probablemente, es cómo estás asignando el nombre. Como es un arreglo (i.e. un puntero a caracteres), no se puede asignar de esa forma. Para eso, está la función strcpy de la librería string.h:

...
#include <string.h>
...

int main(...){
  ...
  char process_name[255];
  ...
  strcpy(p -> name, process_name);
  ...
}

Ojo que ahí ocupo char process_name[255] porque eso me define un puntero con espacio para 255 caracteres, con la gracia de que no necesito liberar la memoria ocupada por ese arreglo al final de mi programa, se hace de forma automática.

¡Dime si eso te funciona!

Geeermy commented 5 years ago

PD: En el ejemplo se asume que process_name ya tiene el nombre del proceso.