+ -
当前位置:首页 → 问答吧 → 段错误

段错误

时间:2010-08-02

来源:互联网

使用gdb调试时出现如下问题:
Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
想查看内存,使用 x/20 0x00000000
得到如下结果:
(gdb) x/20  0x00000000
0x0:        Cannot access memory at address 0x0

我的源程序是:(就是这一段有问题)

        struct stat * buff;//test fstat func
        b=fstat(fd,buff);
        if(b!=0){
                printf("can not get info");
                return 1;
        }
        else{
                printf("succeed in fstat!\n");
                printf("the info is:\n uid=%d,gid=%d,size=%d\n",buff->st_uid,buff->st_gid,buff->st_size);
        }
       //delete buff;
请教各位

作者: hjwsm1989   发布时间: 2010-08-02

struct stat buff;//test fstat func
        b=fstat(fd,&buff);

作者: hellioncu   发布时间: 2010-08-02

很常见的错误了,没初始化指针就用.要么用楼上的办法,要么就用malloc给指针分配内存.回头不用别忘了free掉

作者: liwangli1983   发布时间: 2010-08-02

你不给buff分配空间,它得来的数据往哪里存
PS:看你的程序最后还注释了一个delete buff,很明显前头少了个申请的操作

作者: daybreakcx   发布时间: 2010-08-02

那个delete注释掉了的,以前也加上了分配函数new,但是出错了的
是不是gdb里面没有加上相应的库?
我调试的时候是用的apue里面的。

作者: hjwsm1989   发布时间: 2010-08-02

直接定义个struct stat吧,没事弄指针干啥

作者: 雨过白鹭洲   发布时间: 2010-08-02

回复 雨过白鹭洲


    谢谢,直接用STAT结构就行了,指针还是存在问题,我再慢慢琢磨怎么使用指针不出问题……

作者: hjwsm1989   发布时间: 2010-08-02

回复 hjwsm1989


指针的话就用malloc分配一个stat结构体,用完最后free掉就好了

作者: 雨过白鹭洲   发布时间: 2010-08-02

相关阅读 更多