次のコードを書いたとき、奇妙な答えが得られました。
#include<stdio.h>
#include<stdlib.h>
main()
{
int *p=malloc(1);
if(p==0)
printf("memory not assigned\n");
else
{
printf("memory assigned\n");
printf("enter an int\t");
scanf("%d",p);
printf("\n You entered number %d",*p);
printf("\nIt has been stored at-%p",p);
}
}
malloc はバイト数として引数を取ると思うので、ここで 1 バイトを入力し、私のマシンでは int が (sizeof() を介して) ストレージに 4 バイトを必要とすることを知っていますが、それでもコードはエラーを表示せず、int 値を入力できます。 3333333 と入力しても問題はありません。malloc(1) の代わりに malloc() を使用すると、gcc は malloc の引数が少なすぎると不平を言いますが、それでも同じ結果が得られます。
仮想ボックスを介してgccで実行しています。