C is a very simple language and it is easy to understand everything about it - at least the most common part. Unfortunately this does not happen in Engineering colleges in India and I also have experienced it. In IISc., making a C compiler is just a subject assignment - because it is only that much.
To answer the above question only 2 things are needed and both everyone knows.
What does
struct xx *s;
This creates a pointer s, which can point to an object of type struct s.
printf("%d", s->x);
What does "->" operator does? s->x is nothing but (*s).x.
*s goes to the memory address contained in s (not the address of s), and takes the value from there (amount of data taken is based on the type of s).
So, now I guess answer should be clear here. Yes, the given code is doing invalid memory access and hence should give runtime error.
But, the given code has another major error, which is that it is initializing structure member variables inside structure definition. This is not allowed in C and will cause compile error.