64位机上函数返回指针的问题
将32位系统代码移植到64位系统时遇到这样一个问题:
一个函数返回ftp_node_t类型的指针 即
ftp_node_t *get_node()
{
ftp_node_t *node=NULL;
node = g_queue->head;
return node;
}
在另一个源码文件中:
ftp_node_t *temp = get_node();
if(temp != NULL)
printf("%s\n", temp->pic_name);
注意:这两段代码在不同文件中,由于get_node函数使用前未声明,编译时会报警告:warning: assignment makes pointer from integer without a cast.
运行一起,发现段错误。
原因如下:
对于使用前未声明的函数,编译器默认会将其定义为int类型,即返回值为int,在64位系统上,int为32位,而指针位64位,temp获取到的地址值会被截短,使用时会出现段错误。
这个问题调试了一天,总结一下还是写代码规范的问题,不能忽略警告。
posted on 2018-03-21 11:46 nothing_and 阅读(831) 评论(0) 收藏 举报
浙公网安备 33010602011771号