C: Effects Of Accessing Uninitialized Variables Using printf()



 https://github.com/pereiradaniel/beginning_c/blob/master/ch2/init.c

// init.c
// Daniele Grech Pereira, 02 November 2022

// Demonstration of variables before and after initialization.

#include <stdio.h>
#define LENGTH(a) sizeof(a) / sizeof(a[0])

void display(char* string, int array[], int size);

int main(int argc, char* argv[])
{
    int num[10] = {1,2,3,4,5,6,7,8,9,10}; // Simultaneously declare and initialize a variable.
    int num2[10]= {1,2,3};                // First three are specified, the rest set to 0.
    int num3[10]= {0};                    // Easy way to initialize all array values with 0.
    int arr[10];                          // Declare an array of ints without initializing.

    // Printing the uninitialized array int arr[] will display garbage and generate warnings
    // from valgrind.
    display("Printing int num[] which has been initialized with data:", num, LENGTH(num));
    display("Printing int num2[] which has been initialized with data:", num2, LENGTH(num2));
    display("Printing int num3[] which has been initialized with data:", num3, LENGTH(num3));
    display("Printing int arr[] which has not been initialized with data:", arr, LENGTH(arr));
    
    // Initialize int arr[]
    for (int i=0; i<LENGTH(arr);++i)
        arr[i] = LENGTH(arr) - i;
    
    display("Printing int arr[] after initialization:", arr, LENGTH(arr));

    return 0;
}

void display(char* string, int array[], int size)
{
    printf("%s\n\t", string);

    for (int i = 0; i < size; ++i)
    {
        printf("%d", array[i]);
        i == size-1 ? printf(".\n") : printf(", ");
    }

    printf("\n");
}

https://github.com/pereiradaniel/beginning_c/blob/master/ch2/init.txt
==309== Memcheck, a memory error detector
==309== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==309== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==309== Command: ./init
==309==
Printing int num[] which has been initialized with data:
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10.

Printing int num2[] which has been initialized with data:
        1, 2, 3, 0, 0, 0, 0, 0, 0, 0.

Printing int num3[] which has been initialized with data:
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0.

Printing int arr[] which has not been initialized with data:
==309== Conditional jump or move depends on uninitialised value(s)
==309==    at 0x48D3AD8: __vfprintf_internal (vfprintf-internal.c:1687)
==309==    by 0x48BDEBE: printf (printf.c:33)
==309==    by 0x1093C0: display (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==    by 0x1092F1: main (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==
==309== Use of uninitialised value of size 8
==309==    at 0x48B781B: _itoa_word (_itoa.c:179)
==309==    by 0x48D36F4: __vfprintf_internal (vfprintf-internal.c:1687)
==309==    by 0x48BDEBE: printf (printf.c:33)
==309==    by 0x1093C0: display (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==    by 0x1092F1: main (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==
==309== Conditional jump or move depends on uninitialised value(s)
==309==    at 0x48B782D: _itoa_word (_itoa.c:179)
==309==    by 0x48D36F4: __vfprintf_internal (vfprintf-internal.c:1687)
==309==    by 0x48BDEBE: printf (printf.c:33)
==309==    by 0x1093C0: display (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==    by 0x1092F1: main (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==
==309== Conditional jump or move depends on uninitialised value(s)
==309==    at 0x48D43A8: __vfprintf_internal (vfprintf-internal.c:1687)
==309==    by 0x48BDEBE: printf (printf.c:33)
==309==    by 0x1093C0: display (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==    by 0x1092F1: main (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==
==309== Conditional jump or move depends on uninitialised value(s)
==309==    at 0x48D386E: __vfprintf_internal (vfprintf-internal.c:1687)
==309==    by 0x48BDEBE: printf (printf.c:33)
==309==    by 0x1093C0: display (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==    by 0x1092F1: main (in /mnt/c/Users/perei/source/repos/beginning_c/ch2/init)
==309==
        77897672, 0, 1086480, 0, 0, 0, 1085600, 0, -16776768, 31.

Printing int arr[] after initialization:
        10, 9, 8, 7, 6, 5, 4, 3, 2, 1.

==309== 
==309== HEAP SUMMARY:
==309==     in use at exit: 0 bytes in 0 blocks
==309==   total heap usage: 1 allocs, 1 frees, 1,024 bytes allocated
==309==
==309== All heap blocks were freed -- no leaks are possible
==309==
==309== Use --track-origins=yes to see where uninitialised values come from
==309== For lists of detected and suppressed errors, rerun with: -s
==309== ERROR SUMMARY: 104 errors from 5 contexts (suppressed: 0 from 0)

Popular posts from this blog

C programming and relevancy

Shakespeare AI: My lady is more beauteous than a rose.

C: Temperature Conversion With Main Repeat