Back to use-of-uninitialized-value
Here is the code for this example (source):
// Created for COMP2521 sanitiser guide
#include <stdio.h>
#include <stdlib.h>
#define N 10
int main(void) {
int array[N] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int *printOrder = malloc(N * sizeof(int));
for (int i = 0; i < N; i++) {
int printIdx = printOrder[i];
printf("%d\n", array[printIdx]);
}
free(printOrder);
}
This code creates array
containing 0..9, then mallocs an array printOrder
of indexes that stores the order to print out array
.
Here is the error message:
printf("%d\n", array[printIdx]);
int printIdx = printOrder[i];
int *printOrder = malloc(N * sizeof(int));
When we allocated memory for the printOrder
array we didn’t initialise it, so each element of this array contains an uninitialised value.
We stored one of these values into printIdx
in line 12 which we then use in line 13 when we try to print, and so get an error.
Make sure that the printOrder
array is initialised. If we don’t know what to put in there yet, we can initialise it to a default like 0
or invalid value like -1
.