文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>c语言函数默认返回值的问题

c语言函数默认返回值的问题

时间:2010-11-01  来源:abonege

其实只怪自己二:
两个c文件
main.c

#include <string.h>
int main()
{
    void* tmp;
    char arr[]="1234567";
    tmp = myalloc (8);
    memcpy(tmp, arr, sizeof(arr));
    return 1;
}

test.c

#include <stdlib.h>
void* myalloc(int size){
    return malloc(size);
}


编译
gcc -c main.c
gcc -c test.c
gcc -o test main.o test.o
运行
./test
咔咔的core dump。
为啥呢?我的机器是64位,这个例子代码只会出现在64位机器上
gdb发现,myalloc返回的指针式64位的,但tmp却只截取了后32位,高位32位给丢弃了,为啥呢,因为编译main.c的时候,没有找到myalloc函数的定义,默认他返回int型的整数,当运行的时候虽然myalloc返回64bit的指针,但是强转成32位的整数然后复制给tmp。
所以应该在main.c里加上myalloc的声明

extern void* myalloc(int size);

这样就好了。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载