1
#include <stdio.h>
main() {
    int a[1];
    a[0] = 1;
    a[1] = 2;
    a[2] = 6;
    printf("%d\n", a[2]);
}

Although a is array of size 1, why does it accept a[2] = 6?

chqrlie
  • 131,814
  • 10
  • 121
  • 189
Dhruvil Amin
  • 761
  • 1
  • 7
  • 18

1 Answers1

3

Although a is array of size 1 then does it accepts a[2]=6?

You think it accepts because it invokes undefined behavior.

Arrays are 0 based indexing in C, and for an array with size 1, only arr[0] is valid access, not even arr[1]. Attempt to access any other index other than 0 in this case will cause out-of-bound access which invokes UB.

By default C spec does not provide any bound checking for array indexing, so you don;t get an error by default. However, if you enable compiler warnings, you should be able to get a hint, at least. FWIW, -Warray-bounds=1 with -O2 should warn you.

That said, for a general hosted environment, the signature of main() is int main(void) in case you don't want to use any command line arguments for the program.

Sourav Ghosh
  • 133,132
  • 16
  • 183
  • 261