Variable no inicializada

De Wikipedia, la enciclopedia libre

En programación, una variable no inicializada es una variable que se declara pero no está ajustada a un valor definido y conocido antes de su uso. Tendrá algún valor, pero no se puede predecir. Como tal, se trata de un error de programación y una fuente común de errores en el software.

Una suposición común hecha por programadores novatos es que todas las variables se establece en un valor conocido, como cero, cuando se declaran. Aunque esto es cierto para muchos lenguajes, no es cierto para todos ellos, y por lo tanto el potencial de error esta ahí. Lenguajes como C usa espacio en la pila para las variables, y la colección de variables asignadas a una subrutina se la conoce como un marco de pila. Mientras que el sistema operativo asignara la cantidad adecuada de espacio para el marco de pila, usualmente lo hace simplemente ajustando el valor del puntero de pila, y no establece la memoria a un nuevo estado (por lo general fuera de las preocupaciones de eficiencia). Por lo tanto, cualquiera que sea el contenido de la memoria en el momento aparecerá como valores iniciales de las variables que ocupan esas direcciones antiguamente.

Ejemplo[editar]

Se puede ver un ejemplo en C:

void count( void ) {
    int k, i;
    for (i = 0; i < 10; i++) {
        k = k + i;
    }
    printf("%d", k);
}

Es imposible determinar el valor final de k, la respuesta debería ser 45 si hubiera empezado en 0 pero esto no es así.

En C, las variables con duración de almacenamiento estático que no se inicializan explícitamente si se inicializan a cero (o nulo, para los punteros).[1]

No sólo son las variables sin inicializar son una causa frecuente de errores, pero este tipo de error es particularmente grave, ya que puede no ser reproducible, en algunos casos, los programas con variables no inicializadas pueden incluso pasar las pruebas de software.

Referencias[editar]

  1. «ISO/IEC 9899:TC3 (Current C standard)» (PDF). 7 de septiembre de 2007. p. 126. Consultado el 26 de septiembre de 2008.  Section 6.7.8, paragraph 10.

Enlaces externos[editar]