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

其实只怪自己二:
两个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);

这样就好了。

作者: abonege   发布时间: 2010-11-01