次のCパズルを見つけました。
Q:IA-64では次のプログラムがsegfaultするのに、IA-32では正常に動作するのはなぜですか?
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
int
64ビットマシンののサイズは、ポインタのサイズと同じではない可能性があることを知っています(int
32ビットであり、ポインタは64ビットである可能性があります)。しかし、これが上記のプログラムとどのように関連しているかはわかりません。何か案は?
#include stdlib.h
(mallocの場合)
sizeof(int) == sizeof(int*)
、たとえば、int
使用されている呼び出し規約でs への異なるレジスターを通じてポインターが返された場合、プラットフォームで合法的に失敗する可能性があります。
malloc()
。GCCは言う:warning: incompatible implicit declaration of built-in function 'malloc'
あまりにも。
stdlib.h
含まれていないような愚かなことですか?