C Language Uso de una variable sin inicializar.


Ejemplo

int a; 
printf("%d", a);

La variable a es un int con duración de almacenamiento automático. El código de ejemplo anterior está tratando de imprimir el valor de una variable no inicializada ( a no se ha inicializado). Las variables automáticas que no están inicializadas tienen valores indeterminados; El acceso a estos puede llevar a un comportamiento indefinido.

Nota: Las variables con almacenamiento local estático o de subprocesos, incluidas las variables globales sin la palabra clave static , se inicializan a cero, o su valor inicializado. Por lo tanto lo siguiente es legal.

static int b;
printf("%d", b);

Un error muy común es no inicializar las variables que sirven como contadores a 0. Usted les agrega valores, pero como el valor inicial es basura, invocará un comportamiento indefinido , como en la pregunta Compilación en el terminal emite una advertencia de puntero y símbolos extraños

Ejemplo:

#include <stdio.h>

int main(void) {
    int i, counter;
    for(i = 0; i < 10; ++i)
        counter += i;
    printf("%d\n", counter);
    return 0;
}

Salida:

C02QT2UBFVH6-lm:~ gsamaras$ gcc main.c -Wall -o main
main.c:6:9: warning: variable 'counter' is uninitialized when used here [-Wuninitialized]
        counter += i;
        ^~~~~~~
main.c:4:19: note: initialize the variable 'counter' to silence this warning
    int i, counter;
                  ^
                   = 0
1 warning generated.
C02QT2UBFVH6-lm:~ gsamaras$ ./main
32812

Las reglas anteriores son aplicables para los punteros también. Por ejemplo, los siguientes resultados en un comportamiento indefinido

int main(void)
{
    int *p;
    p++; // Trying to increment an uninitialized pointer.
}

Tenga en cuenta que el código anterior por sí solo puede no causar un error o un error de segmentación, pero tratar de eliminar la referencia a este puntero más adelante causaría el comportamiento indefinido.