Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

173
Vistas
¿Está bien devolver un puntero asignado al montón desde la función?

Cuando regresamos de la función, si el valor devuelto es un puntero, debe definirse como estático. ¿Es esto cierto para el puntero asignado a la memoria del montón (como los punteros new / malloc ) también?

considera este ejemplo:

 #include"stdio.h" char * func() { char * X=new char[10]; X[0]='C'; x[1]='\0'; return X;//is it a good return from function? } main() { char * A=func(); puts(A); delete[] A; }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Como ya han señalado otros, técnicamente, el código está bien.
Sin embargo, el verdadero problema con el código es la firma de la función char * func() . Solo especifica que devolverá un puntero a un char. Ese puntero puede ser

  • un puntero normal a una variable char
  • un puntero a una matriz de caracteres
  • un puntero a una cadena de estilo c

El puntero puede apuntar a

  • memoria estática
  • memoria asignada en montón que se liberará en otro lugar
  • memoria asignada en el montón que se supone que debes liberar.

No hay forma de saber qué hacer a menos que desee confiar en la documentación o investigar posiblemente en una gran cantidad de código (funciones que llaman a funciones que llaman a funciones...).

Esto se puede evitar volviendo

  • un char
  • una std::cadena
  • un contenedor
  • un puntero inteligente.

La administración manual de la memoria es difícil de realizar correctamente dentro de una aplicación completa y nunca debe ser su principal preocupación, por lo que debe evitarse y no ocultarse mediante punteros de retorno de funciones.

over 4 years ago · Santiago Trujillo Denunciar

0

Además del extraño cambio de incremento/decremento, el código está bien.

La variable X queda fuera del alcance cuando la función regresa, pero esa es solo la variable real y no a lo que apunta.

Los punteros son básicamente enteros simples, cuyo contenido resulta ser una dirección a algún lugar de la memoria, y el compilador los trata especialmente. Lo que sucede cuando la función regresa es que el contenido de la variable X se copia antes de que la variable quede fuera del alcance. Luego, la copia del contenido (la dirección de memoria real) se vuelve a copiar, esta vez a la variable A en la función de llamada.

over 4 years ago · Santiago Trujillo Denunciar

0

C++ no se recolecta basura. X en func() no se desasigna hasta que se delete [] A declaración en main() .

Las travesuras con el incremento y la disminución de X no cambian eso (a menos que hagan que X apunte fuera de la memoria asignada con el operador new , lo que daría como resultado un comportamiento indefinido).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda