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)    收藏  举报

导航