C/Visual C - Se puede devolver en un procedimiento, un vector?

 
Vista:

Se puede devolver en un procedimiento, un vector?

Publicado por tah_oli (1 intervención) el 24/10/2003 16:59:30
Se puede devolver en un procedimiento, un vector en un parametro de salida? Tengo un procedimiento que me tiene q devolver un vector creado localmente, y no veo forma de que lo devuelva, puesto que si le paso la direccion nada mas, el vector creado localmente se destruye cuando salga del procedimiento, necesito ayuda de verdad? estoy empenzando con Cy esto de los punteros y el paso de parametros no se me aclara? alguien sabe de alguna pagina donde me pueda ayudar o pueda responderme directamente? muchas gracas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Se puede devolver en un procedimiento, un vecto

Publicado por Oliver++ (339 intervenciones) el 24/10/2003 18:26:24
Primero, los procedimientos no devuelven valores.
Segundo, en C/C++ se le llaman funciones nulas, no procedimentos.
Y tercero puedes hacer lo sig. aunque es un poco peligroso.
int* Funcion ()
{
int* returnValue = new [ dimensionArray ];
//haces lo que vas a hacer
return returnValue;
}

debes destruir en la funcion receptora el array, pues al estar en la pila el puntero este se destrulle al final de la funcion. Si no lo haces tendras memory leaks o fuga de memoria con consecuencias muy perjudiciales.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Se puede devolver en un procedimiento, un vecto

Publicado por chuidiang (677 intervenciones) el 27/10/2003 07:14:01
La forma que te indica Oliver++ es correcta y no tendrás ningún problema con ella.

El puntero returnValue desaparece al salir de la función (esta variable puntero, es local), pero la memoria reservada con new permanece hasta que se haga un delete. Una vez fuera de la función, puedes usarla con total seguridad.

Si haces

int *mipuntero;
mipuntero = Funcion();

puedes usar mipuntero[i] con total seguridad. El único detalle, es que debes de acordarte de hacer
delete[] mipuntero;
cuando no lo necesites.

Otro detalle importante es que de esta forma no has devuelto el tamaño del array, así que o lo sabes a priori, o no tienes forma de saber cual es el indice mayor. Pasarse del array si sería un error.

En www.geocities.com/chuidiang tienes un tutorial con cosas de punteros que te puede aclarar un poco.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar