Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/07/2013, 21:31
carbon
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Variable por referencia y malloc

Hola, como les va? Voy directo al grano. No logro conseguir que malloc se aplique también a la variable que paso por referencia, solo lo hace dentro de la función. Seguramente sea una tontería, como poner o sacar un '*', pero no lo logro ver.

Código C:
Ver original
  1. void change_value(char **buffer)
  2. {
  3.     buffer = malloc(2 * sizeof(char *));
  4.    
  5.     buffer[0] = malloc(5);
  6.     buffer[1] = malloc(5);
  7.    
  8.     strcpy(buffer[0], "hola");
  9.     strcpy(buffer[1], "chau");
  10. }
  11.  
  12. int main(int argc, char **argv)
  13. {
  14.     char **buffer = NULL;
  15.    
  16.     change_value(buffer);
  17.     printf("%s, %s\n", buffer[0], buffer[1]);  // <- Segmentation fault
  18.    
  19.     free(buffer);
  20.    
  21.     return 0;
  22. }

Y pasando un puntero, tampoco:

Código C:
Ver original
  1. void change_value(char ***buffer)
  2. {
  3.     *buffer = malloc(2 * sizeof(char *));
  4.    
  5.     *buffer[0] = malloc(5);
  6.     *buffer[1] = malloc(5);
  7.    
  8.     strcpy(*buffer[0], "hola");
  9.     strcpy(*buffer[1], "chau");
  10. }
  11.  
  12. int main(int argc, char **argv)
  13. {
  14.     char **buffer = NULL;
  15.    
  16.     change_value(&buffer);
  17.     printf("%s, %s\n", buffer[0], buffer[1]);
  18.    
  19.     free(buffer);
  20.    
  21.     return 0;

Por supuesto si malloc lo aplico fuera de la función corre perfectamente.

Gracias.