elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como regreso mas de un variable de una funcion con un apuntador??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: como regreso mas de un variable de una funcion con un apuntador??  (Leído 5,908 veces)
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #10 en: 1 Marzo 2014, 01:38 am »

Osea que la función estaba mal o free hace otra cosa aparte de liberar la memoria
La función esta mal, lo correcto es:
Código
  1. int *func()
  2. {
  3.   int *to_return = (int *) malloc(2 * sizeof(int));
  4.  
  5.   to_return[0] = 1;
  6.   to_return[1] = 2;
  7.  
  8.   return to_return;
  9. }

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #11 en: 2 Marzo 2014, 21:09 pm »

Bueno, comentando acerca del free ha debido ser un despiste o lapsus de eferion, pues si desasignas la memoria del arreglo, el mismo ya no será útil  :huh:

Ahora ya no hablando del programa de eferion sino más en general. Sabemos que sobre gustos no hay nada escrito, pero si se permite mi opinión siempre me ha parecido más elegante la solución de pasar parámetros por referencia a la función. De ese modo se pueden realizar modificaciones a los mismos, con el mismo efecto como si la función devolviera varios parámetros de retorno (que no es permitido en C).

Incluso si usaras un estructura, puede pasarse la misma como argumento por referencia de la función, en lugar de devolver la estructura como valor de retorno.

La razón por la que me inclino por esta modalidad es que (y repito es una opinión personal) luce más acorde con la filosofía original de diseño de C. A ver, por ejemplo cuando usas la función estándar fread para leer de un fichero, no obtienes el arreglo de bytes leídos como valor de retorno, ¿verdad? En su lugar, dicho arreglo (un puntero a char) es pasado como argumento de entrada.

El valor de retorno de las funciones debería ser utilizado más bien para indicar si hubo un error en la ejecución de la misma (devuelve -1) o ejecución exitosa (devuelve 0). O en el caso de funciones de E/S como fread para indicar la cantidad de elementos leídos.

Saludos


« Última modificación: 2 Marzo 2014, 21:14 pm por yoel_alejandro » En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #12 en: 3 Marzo 2014, 08:21 am »

Hola yo me refiria a las clases pero una pregunta. Como funciona este codigo:

Código
  1. int* func( )
  2. {
  3.  int* to_return = (int*)malloc( 2 * sizeof( int ) );
  4.  
  5.  to_return[ 0 ] = 1;
  6.  to_return[ 1 ] = 2;
  7.  
  8.  free( to_return );
  9. }

ya que nunca devuelve. Creo que free no devuelve o si?

Saludos

Mil perdones... hice el programa sobre la marcha en un descanso que me tomé... mis dedos no iban por el mismo camino que mis pensamientos.
En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: como regreso mas de un variable de una funcion con un apuntador??
« Respuesta #13 en: 3 Marzo 2014, 17:17 pm »

Es justo lo que había supuesto, un lapsus involuntario ... (también me ha sucedido). No problem!!!
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines