arrays - Is it a case of memory overflow or overwrite in C? -


this question has answer here:

this code. playing around small piece of code wrote.

even though character array of pointers of 2 elements, able write in memory location using pointer address of character array indirectly when having 2 elements.

i thinking in wrong way or because over-exerted today.

i hope can shed light on it.

#include <stdio.h>  int main(void) {     char a[] ="gkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3u";     char b[] ="gkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3ugkdkoswddmjqkt6fgz3u";     char *line_store[2];     *(line_store) = a;     *(line_store + 2) = b;     printf("%s\n\n", *(line_store));     printf("%s\n\n", *(line_store+1));     printf("%s\n\n", *(line_store+2));     return 0; } 

your code works because c doesn't boundary checking on array. you're writing beyond last element allocated, causes write unallocated space in memory. working accident, , subsequent runs theoretically crash, or overwrite other valid memory segments, depending , how done in larger program.