Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

172
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda