Working my way through a C tutorial
#include <stdio.h>
int main() {
short s = 10;
int i = *(int *)&s; // wonder about this
printf("%i", i);
return 0;
}
When I tell C that the address of s is an int, should it not read 4 bytes?
Starting from the left most side of 2 bytes of s. In which case is this not critically dangerous as I don’t know what it is reading since the short only assigned 2 bytes?
Should this not crash for trying to access memory that I haven’t assigned/belong-to-me?
First of all, never do this.
As to why it doesn’t crash: since
sis a local, it’s allocated on the stack. Ifshortandinthave different sizes in your architecture (which is not a given), then you will probably end up reading a few more bytes from memory that’s on the same memory page as the stack; so and there will be no access violation (even though you will read garbage).Probably.