다음 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
포함되지 않는 것과 같은 어리석은 일 입니까?