私は C を学んでいて、型キャストとメモリ割り当てを理解しようとしていました。
私は小さなコードを書き、それが失敗すると思った。
#include <stdio.h>
#include <stdlib.h>
struct A {
int x;
int y;
};
int main()
{
int *i;
float *f;
struct A *ptr;
i = (int *)malloc(4);
if(i==NULL) {
printf("\n failed to allocate memory \n");
return 1;
}
*i=10;
printf(" %d \n",*i);
f = (float *)i;
*f = 10.2;
printf(" %f \n",*f);
ptr = (struct A *)f;
ptr->x=10;
ptr->y=20;
printf(" %hd \n",ptr->x);
printf(" %hd \n",ptr->y);
}
4 バイトのメモリを割り当て、float (4 バイト) と 8 バイトの構造体を指す同じポインターを型キャストしたため、このコードは失敗すると予想していました。私はそれがセグフォールトを与えると思っていましたが、問題なく値を出力しました。
私が欠けているものはありますか?