LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1143|回复: 8

一个很奇怪的错误??实在不明白,请大家指教

[复制链接]
发表于 2010-1-4 13:24:55 | 显示全部楼层 |阅读模式
代码如下:
int read(char *buf) {
         int len;
         scanf("%s",buf);
         len=strlen(buf);.........................................执行到这一句时出现段错误,gdb显示如下:

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) bt
#0  0x00000000 in ?? ()

这是为什么 是在不明白 请大家指教
发表于 2010-1-4 13:53:42 | 显示全部楼层
上下文?

能否提取此函数出来,写一个简单的只含有一个 main() 的程序来测试?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-4 13:56:49 | 显示全部楼层
主程序如下:
int main(void) {
char *bufout;
......................
read(bufout);//此处为调用原帖中的那个函数
....................
write(STDOUT_FILENO,bufout,BUFSIZE);
...........
return 0;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-4 14:13:20 | 显示全部楼层
写了这样的一个main测试也没有问题
void packet(char *buf) {
        int len;

        scanf("%s",buf);
        printf("%s",buf);
        len=strlen(buf);
        printf("length: %d\n",len);
}

int main(void) {
        char *bufout;
        bufout=(char *)malloc(10);
        packet(bufout);
        return 0;
}
请大家指教!
回复 支持 反对

使用道具 举报

发表于 2010-1-4 15:59:42 | 显示全部楼层
buf没有初始化,野指针
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-4 17:28:08 | 显示全部楼层
但是在加入buf=(char *)malloc(10)之后依然出现上述问题
不知道为什么
回复 支持 反对

使用道具 举报

发表于 2010-1-11 15:24:48 | 显示全部楼层

长度问题。。。

Post by tomharold;2061921
但是在加入buf=(char *)malloc(10)之后依然出现上述问题
不知道为什么



你scanf输入的长度如果大于你分配的10-1,就会出错。。

用scanf不大安全,应为没有指定长度的功能

如果你scanf的长度大于你的缓冲区,那麻烦就来了
回复 支持 反对

使用道具 举报

发表于 2010-1-17 17:49:29 | 显示全部楼层
没有初始化 char* buf
回复 支持 反对

使用道具 举报

发表于 2010-1-29 17:37:14 | 显示全部楼层
Post by tomharold;2061864
写了这样的一个main测试也没有问题
void packet(char *buf) {
        int len;

        scanf("%s",buf);
        printf("%s",buf);
        len=strlen(buf);
        printf("length: %d\n",len);
}

int main(void) {
        char *bufout;
        bufout=(char *)malloc(10);
        packet(bufout);
        return 0;
}
请大家指教!


我原封不动的copy了楼主的程序试了一下 没问题哦
没有出现段错误
(gcc version 4.1.2)

这个跟buf没有初始化没关系啊 bufout 也不是野指针啊,溢出倒是会的,不过在我这里没有出现,应该是后面也写过去了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表