Encontrei o seguinte quebra-cabeça C:
P: Por que o seguinte programa falha em segfault no IA-64, mas funciona bem no IA-32?
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
Eu sei que o tamanho de int
em uma máquina de 64 bits pode não ser o mesmo que o tamanho de um ponteiro ( int
pode ser de 32 bits e o ponteiro pode ser de 64 bits). Mas não tenho certeza de como isso se relaciona com o programa acima. Alguma ideia?
#include stdlib.h
(para malloc)
#include <stdlib.h>
, é perfeitamente encontrado, mas isso não está em questão.
sizeof(int) == sizeof(int*)
, por exemplo, os ponteiros são retornados por meio de um registro diferente para int
s na convenção de chamada usada.
malloc()
. GCC diz: warning: incompatible implicit declaration of built-in function 'malloc'
também.
stdlib.h
não ser incluído?