C/Visual C - Ayuda con delete

 
Vista:

Ayuda con delete

Publicado por Josema (7 intervenciones) el 22/04/2001 17:02:53
Hola. He creado una función que devuele un char*. Tengo que devolver una cadena que he creado con reserva dinámica de memoria. Pero como hago esto:
FORMA 1:
return cadena;
delete [] cadena;
(asi funciona pero como no se ejecuta delete [] cadena, no libero memoria)

FORMA 2 (al revés):
delete [] cadena;
return cadena;
(asi tb funciona, pero es seguro liberar la memoria y luego devolver el valor?)

GRACIAS (que veo muchos, o la mayoria, sois sudamericanos. SALUDOS desde España)
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

array son 'evil'

Publicado por Manuel Kobashigawa (79 intervenciones) el 22/04/2001 19:59:03
no extiendo exactamente tu pregunta, mas la alt. 2, es incorrecta, porque antes del return estas destruyendo el array.
la primera alternativa esta bien. como lo que estas \'pasando\' es un puntero a un array de caracteres, es posible hacer el delete fuera de su scope, es decir la funcion que recibe el puntero, tiene propiedad sobre el y es factible hacer un delete en esa funcion. personalmente no uso mucho este caso, prefiero hacer el delete dentro de la funcion donde cree el objeto. y para pasar el array a otra funcion lo haria con un return puntero a char.
mas o menos asi:

char* my_func()
{
char* char_ptr= new char[20];
.
.

return char_ptr;
}

int main()
{
char* ch= my_func();
.
.
delete []ch;
}
..si esto satisface tu pregunta.
en lo posible trata de usar objectos de tipo string.
manuel
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:array son 'evil'

Publicado por Germán B. (143 intervenciones) el 22/04/2001 21:40:32
Eso sí está bien, pero ninguna de las alternativas de Josema es viable. En la primera intentaba hacer el delete "luego del return", cuando el return implica la finalización de la función.

Hay otra posibilidad, que es que la función principal administre completamente el puntero y su asignación dinámica, pasando este puntero como argumento a la otra función y que esta almacene determinados caracteres ahí.
Está claro que la función (no la principal) no debería intentar "deletear" lo que pretende retornar.
Saludos de Sudamérica
G
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:array son 'evil'

Publicado por Manuel Kobashigawa (79 intervenciones) el 23/04/2001 06:37:43
es cierto German y Josema, en la primera alt. estas haciendo el delete luego del return, cosa que NUNCA se va a lograr y el obj va a persistir.
es decir ni la prim ni seg alternativa son validas.
fue un (gran)error de observacion. eso a veces ocurre.
en todo caso el ej. que te mostre libera por completo la memoria asignada a el objeto.
manuel
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:Gracias a los dos

Publicado por Josema (7 intervenciones) el 23/04/2001 20:18:19
Con gente como vosotros da gusto. Muchas gracias.
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