最近在调试时遇到一个指针问题,百思不得其解。直到搜索了下面这条警告才找到问题的原因。
warning: assignment makes pointer from integer without a cast
原以为是参数传递的问题,仔细检查,原来是返回值。那段代码在32位机上没问题,到64位就出事了。请看:
// main.c
main()
{
void* c = test1();
printf("2 %p\n", c);
}
// test.c
void* test1()
{
int i;
printf("1 %p\n", &i);
return (void*)&i;
}
执行结果:
1 0x7fff5fbff92c
2 0x5fbff92c
gcc对于未声明的函数默认返回integer,但64位上integer就跟pointer长度不匹配了。
特此记下,以作备忘。