其实只怪自己二:
两个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);
|
这样就好了。
阅读(4012) | 评论(0) | 转发(0) |