幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2190|回复: 3

[通用编程] 为何无法运行

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2007-11-29 00:45:36 | 显示全部楼层 |阅读模式
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. struct qnode
  4. {
  5.     char data;
  6.     struct qnode *next;
  7.    
  8.    
  9. };
  10. typedef struct queue
  11. {
  12.     struct qnode *rear;
  13. }linkqueue;
  14. void initqueue(linkqueue *q)
  15. {
  16.     q=(struct queue *)malloc(sizeof(struct queue));
  17.     q->rear=NULL;
  18. }
  19. void enter(linkqueue *q,char x)
  20. {
  21.     struct qnode *s,*p;
  22.    
  23.     s=(struct qnode *)malloc(sizeof(struct qnode));
  24.     s->data=x;
  25.     if(q->rear==NULL)
  26.     {
  27.         q->rear=s; s->next=s;
  28.     }
  29.     else
  30.     {
  31.         p=q->rear->next;
  32.         q->rear->next=s;
  33.         q->rear=s;s->next=p;
  34.     }
  35. }
  36. void del(linkqueue *q)
  37. {
  38.     struct qnode *t;
  39.     if(q->rear==NULL)
  40.     {
  41.         printf("队列为空\n");
  42.         
  43.     }
  44.     else if(q->rear->next==q->rear)
  45.     {
  46.         t=q->rear;
  47.         q->rear=NULL;
  48.     }
  49.     else
  50.     {
  51.         t=q->rear->next;
  52.         q->rear->next=t->next;
  53.     }
  54.     free(t);
  55. }
  56. char gethead(linkqueue *q)
  57. {
  58.     if(q->rear==NULL)
  59.         printf("队列为空\n");
  60.     else
  61.         return(q->rear->next->data);
  62.     return 0;
  63. }
  64. int empty(linkqueue *q)
  65. {
  66.     if(q->rear==NULL) return 1;
  67.     else return 0;
  68. }
  69. void dis(linkqueue *q)
  70. {
  71.     struct qnode *p=q->rear->next;
  72.     printf("队列元素:");
  73.     while(p!=q->rear)
  74.     {
  75.         printf("%c ",p->data);
  76.         p=p->next;
  77.     }
  78.     printf("%c\n",p->data);
  79. }
  80. void main()
  81. {
  82.    
  83.     linkqueue *qu;
  84.    
  85.     printf("初始化\n");
  86.     initqueue(qu);
  87.     printf("输入a,b,c\n");
  88.     enter(qu,'a');
  89.     enter(qu,'b');
  90.     enter(qu,'c');
  91.     dis(qu);
  92. }
复制代码
为什么在VC++里无法运行呢??
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2007-11-29 11:53:53 | 显示全部楼层
不只VC,其它C编译器也应该无法让它运行吧。
从main开始看的话,一开始就有错。
  1. linkqueue *qu;
复制代码
声明了一个linkqueue指针。
  1. initqueue(qu);
复制代码
执行了这个调用后,qu应该还是一个任意的杂乱数据(VC的话,在调试模式下印象中是0xCDCDCDCD?现在用的这台机上没开发环境,无法测试)

原因……请LZ仔细想想指针、引用、按值传递、按引用传递的关系
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2007-11-29 22:48:35 | 显示全部楼层
[s:3] 在TC上可以???
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

8

主题

215

帖子

2223

积分

⑥精研

积分
2223
发表于 2007-11-30 11:17:06 | 显示全部楼层
你可以尝试一下在initqueue()的前后都加上一句打印qu的数值的语句来看我说的对不对:
  1. printf("0x%X\\n", qu);
复制代码

在initqueue()的里面,malloc()之后也加一句printf()来对比下:
  1. printf("0x%X\\n", q);
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-29 06:40 , Processed in 0.021094 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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