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

210
Vistas
¿Es seguro usar el puntero argv globalmente?

¿Es seguro usar el puntero argv globalmente? ¿O hay alguna circunstancia en la que pueda dejar de ser válida?

es decir: ¿Este código es seguro?

 char **largs; void function_1() { printf("Argument 1: %s\r\n",largs[1]); } int main(int argc,char **argv) { largs = argv; function_1(); return 1; }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Sí, es seguro usar argv globalmente; puede usarlo como usaría cualquier char** en su programa. El estándar C99 incluso especifica esto:

Los parámetros argc y argv y las cadenas a las que apunta la matriz argv serán modificables por el programa y conservarán sus últimos valores almacenados entre el inicio y la finalización del programa.

El estándar C++ no tiene un párrafo similar, pero el mismo está implícito sin ninguna regla en contrario.

Tenga en cuenta que C ++ y C son lenguajes diferentes y solo debe elegir uno para hacer su pregunta.

over 4 years ago · Santiago Trujillo Denunciar

0

Debería ser seguro siempre que la función main() no salga. Algunos ejemplos de cosas que pueden suceder después de la salida de main() son:

  1. Destructores de variables globales y estáticas
  2. Subprocesos que se ejecutan más que main()

El argv almacenado no debe usarse en esos.

La referencia no dice nada que dé una razón para suponer que la vida útil de los argumentos de la función main() difiere de las reglas generales para la vida útil de los argumentos de la función.

Siempre que el puntero argv sea válido, el tiempo de ejecución de C/C++ debe garantizar que el contenido al que apunta este puntero sea válido (por supuesto, a menos que algo dañe la memoria). Por lo tanto, debe ser seguro usar el puntero y el contenido durante tanto tiempo. Después de que main() regresa, tampoco hay razón para que el tiempo de ejecución de C/C++ mantenga el contenido válido. Entonces, el razonamiento anterior se aplica tanto al puntero como al contenido al que apunta.

over 4 years ago · Santiago Trujillo Denunciar

0

¿Es seguro usar el puntero argv globalmente?

Esto requiere un poco más de aclaración. Como dice la especificación C11 en el capítulo §5.1.2.2.1, Inicio del programa

[..].. con dos parámetros (referidos aquí como argc y argv , aunque se puede usar cualquier nombre, ya que son locales a la función en la que se declaran)

Eso significa que las variables mismas tienen un alcance limitado a main() . Ellos mismos no son globales .

De nuevo la norma dice,

Los parámetros argc y argv y las cadenas a las que apunta la matriz argv serán modificables por el programa y conservarán sus últimos valores almacenados entre el inicio y la finalización del programa.

Eso significa que la vida útil de estas variables es hasta que main() finaliza la ejecución.

Por lo tanto, si está utilizando una variable global para mantener el valor de main() , puede usar de forma segura esos globales para acceder a la misma en cualquier otra función.

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