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

[SOLUCIONADO] Variable por referencia y malloc

Estas en el tema de Variable por referencia y malloc en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 17/07/2013, 21:31
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 11 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.

  #2 (permalink)  
Antiguo 17/07/2013, 21:52
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Variable por referencia y malloc

Tu segundo intento es casi perfecto, solamente te falto añadirle paréntesis (prioridad de operadores ).

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void change_value(char ***buffer)
  6. {
  7.     *buffer = malloc(2 * sizeof(char *));
  8.  
  9.     (*buffer)[0] = malloc(5);
  10.     (*buffer)[1] = malloc(5);
  11.  
  12.     strcpy((*buffer)[0], "hola");
  13.     strcpy((*buffer)[1], "chau");
  14. }
  15.  
  16. int main(int argc, char **argv)
  17. {
  18.     char **buffer = NULL;
  19.  
  20.     change_value(&buffer);
  21.     printf("%s, %s\n", buffer[0], buffer[1]);  // <- Segmentation fault
  22.  
  23.     free(buffer);
  24.  
  25.     return 0;
  26. }
  #3 (permalink)  
Antiguo 18/07/2013, 08:07
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 11 meses
Puntos: 35
Respuesta: Variable por referencia y malloc

Cierto, gracias!


Etiquetas: int, malloc, referencia, variable
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 03:07.