免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1191 | 回复: 6
打印 上一主题 下一主题

高手帮忙看一下!谢谢了! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-26 00:56 |只看该作者 |倒序浏览
//是个队列的小程序,可是运行时总是出现段错误。我把有问题的部分挑出来了
#include <stdio.h>  
#include <stdlib.h>

typedef struct QNode
{
        int data;
        struct QNode *next;
}QNode, *QPtr;
typedef struct QLink
{
        QPtr front, rear;
}QLink;

void Error(char *s)
{
        printf("%s\n",s);
}

void InitQueue(QLink *Q)
{
        Q->front = ( QPtr )malloc(sizeof(QNode));
        if(!Q->front)
        {
                Error("InitQueue memory error!");
                exit(0);
        }
        Q->rear = Q->front;
        Q->front->next = NULL;
}
void DestroyQueue(QLink *Q)
{
        while(Q->front)
        {
                Q->rear = Q->front->next;
                free(Q->front);
                Q->front = Q->rear;
        }
}

int main()
{
        QLink *Q;
        int i, t;
        InitQueue(Q);
        DestroyQueue(Q);
        return 0;
}
调试的时候是这样,gdb用的也不熟悉,找不到哪儿错了。
(gdb) r
Starting program: /home/guorh/datastructure/a.out

Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) where
#0  0x00000000 in ?? ()
#1  0x00000001 in ?? ()
#2  0xbfb20344 in ?? ()
#3  0xbfb2034c in ?? ()
#4  0xb7f4c878 in ?? ()
#5  0x00000000 in ?? ()

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2006-12-26 08:50 |只看该作者
在InitQueue()的参数中,
你应该用指针的指针。
要清楚c语言参数的by value规则。

论坛徽章:
0
3 [报告]
发表于 2006-12-26 09:03 |只看该作者
所有基础的东西,我都用 glib

论坛徽章:
0
4 [报告]
发表于 2006-12-26 09:08 |只看该作者
和传参数没有关系,q指针没有申请内存,所以
  1. Q->front = ( QPtr )malloc(sizeof(QNode));
复制代码

这句Segmentation fault.

论坛徽章:
0
5 [报告]
发表于 2006-12-26 09:52 |只看该作者
原帖由 boxpei 于 2006-12-26 09:08 发表
和传参数没有关系,q指针没有申请内存,所以
  1. Q->front = ( QPtr )malloc(sizeof(QNode));
复制代码

这句Segmentation fault.


不过Q没有创建呀,Q为NULL

论坛徽章:
0
6 [报告]
发表于 2006-12-26 09:54 |只看该作者
谢谢楼上得,就是这个原因,在vc有警告提示,可是gcc确没有警告。。。。。

论坛徽章:
0
7 [报告]
发表于 2006-12-26 10:16 |只看该作者
原帖由 cxzh9888 于 2006-12-26 09:52 发表


不过Q没有创建呀,Q为NULL



Q正是因为没有创建.你却用他来访问一个不存在的或者无效的地址
当然是core了

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP