Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173678
  • 博文数量: 60
  • 博客积分: 677
  • 博客等级: 上士
  • 技术积分: 667
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-30 15:49
文章分类

全部博文(60)

文章存档

2015年(1)

2013年(6)

2012年(16)

2011年(9)

2010年(28)

我的朋友

分类: C/C++

2010-11-01 15:59:54

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

这样就好了。
阅读(3968) | 评论(0) | 转发(0) |
0

上一篇:cscope-index错误

下一篇:FREEBSB7.3编译内核

给主人留下些什么吧!~~