como regreso mas de un variable de una funcion con un apuntador??

Iniciado por hugodavidx, 28 Febrero 2014, 00:12 AM

0 Miembros y 2 Visitantes están viendo este tema.

rir3760

Cita de: patilanz en 28 Febrero 2014, 18:05 PMOsea que la función estaba mal o free hace otra cosa aparte de liberar la memoria
La función esta mal, lo correcto es:
int *func()
{
   int *to_return = (int *) malloc(2 * sizeof(int));
   
   to_return[0] = 1;
   to_return[1] = 2;
   
   return to_return;
}


Un saludo
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

#11
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
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

eferion

Cita de: patilanz en 28 Febrero 2014, 13:56 PM
Hola yo me refiria a las clases pero una pregunta. Como funciona este codigo:

Código (csharp) [Seleccionar]
int* func( )
{
  int* to_return = (int*)malloc( 2 * sizeof( int ) );

  to_return[ 0 ] = 1;
  to_return[ 1 ] = 2;

  free( to_return );
}


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.

Yoel Alejandro

Es justo lo que había supuesto, un lapsus involuntario ... (también me ha sucedido). No problem!!!
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)