当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 高手帮忙看一下!谢谢了!
帖子发表于 : 2006-12-26 0:52 

注册: 2006-09-15 19:14
帖子: 87
送出感谢: 0 次
接收感谢: 0 次
//是个队列的小程序,可是运行时总是出现段错误。我把有问题的部分挑出来了
#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 ?? ()


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-12-26 16:47 

注册: 2006-11-13 10:11
帖子: 9
送出感谢: 0 次
接收感谢: 0 次
去掉第一个*Qptr,后的*Qprt改成QNode*就可以,你那样定义有问题,并且我也不觉得即使定义对了,你能使代码简洁多少。下面是修改改后的代码,中间加了两句打印,为的是可以看到程序运行的情况。(主要是我的gdb运行有问题,只好手动一下。)

#include <stdio.h>
#include <stdlib.h>

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

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

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

int main(){
QLink *Q;
int i, t;
InitQueue(Q);
DestroyQueue(Q);
return 0;
}


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-12-26 22:41 

注册: 2006-09-15 19:14
帖子: 87
送出感谢: 0 次
接收感谢: 0 次
谢谢楼上的回答,问题我找到了 最主要的是主函数中QLink *Q;之是一个指针,没有分配空间
nt main(){
QLink Q;
int i, t;
InitQueue(&Q);
DestroyQueue(&Q);
return 0;
}
这样就可以了!


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-01-15 15:38 
头像

注册: 2005-12-23 13:48
帖子: 48
送出感谢: 0 次
接收感谢: 0 次
显然是内存分配的问题..顶了再看


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Exabot [Bot] 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译