Я наткнулся на следующую загадку C:
В: Почему следующая программа имеет segfault на IA-64, но нормально работает на IA-32?
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
Я знаю, что размер int
на 64-битной машине может отличаться от размера указателя ( int
может быть 32 бита, а указатель может быть 64 бита). Но я не уверен, как это связано с указанной выше программой. Любые идеи?
#include stdlib.h
(для malloc)
#include <stdlib.h>
, что это прекрасно найти, но не в этом вопрос.
sizeof(int) == sizeof(int*)
, например, указатели были возвращены через регистр, отличный от int
s в используемом соглашении о вызовах.
malloc()
. GCC говорит: warning: incompatible implicit declaration of built-in function 'malloc'
тоже.
stdlib.h
отсутствие включения?