Mi sono imbattuto nel seguente puzzle C:
D: Perché il seguente programma segfault su IA-64, ma funziona bene su IA-32?
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
So che la dimensione di int
su una macchina a 64 bit potrebbe non essere la stessa della dimensione di un puntatore ( int
potrebbe essere di 32 bit e il puntatore potrebbe essere di 64 bit). Ma non sono sicuro di come questo si riferisca al programma di cui sopra. Qualche idea?
#include stdlib.h
(per malloc)
#include <stdlib.h>
, è perfettamente trovato, ma non è questo il problema.
sizeof(int) == sizeof(int*)
, se ad esempio i puntatori venissero restituiti tramite un registro diverso per int
s nella convenzione di chiamata utilizzata.
malloc()
. GCC dice: warning: incompatible implicit declaration of built-in function 'malloc'
anche.
stdlib.h
non essere inclusi?