Natknąłem się na następującą zagadkę C:
P: Dlaczego następujący program segfaulta na IA-64, ale działa dobrze na IA-32?
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
Wiem, że rozmiar int
na komputerze 64-bitowym może nie być taki sam jak rozmiar wskaźnika ( int
może wynosić 32 bity, a wskaźnik może mieć 64 bity). Ale nie jestem pewien, jak to się ma do powyższego programu. Jakieś pomysły?
#include stdlib.h
(dla malloc)
#include <stdlib.h>
, jest doskonale znaleziony, ale nie o to chodzi.
sizeof(int) == sizeof(int*)
, jeśli na przykład wskaźniki zostaną zwrócone, chociaż rejestr inny niż int
s w używanej konwencji wywoływania.
malloc()
. GCC mówi: warning: incompatible implicit declaration of built-in function 'malloc'
też.
stdlib.h
nie uwzględnienie?