初学者问题:这个程序错在哪

sunzhikai1978 2003-10-16 11:09:57
编译环境:vc6

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

typedef struct node{
int value;
struct node *next;
}Inode;

int main()
{
Inode *p,*q,*root;
root = (Inode*)malloc(sizeof(Inode));
p = root;
q = root;
int data;
do
{
p = (Inode*)malloc(sizeof(Inode));
q = p;
scanf("%d",&data);
if(data != 0)
{
p->value = data;
p->next = NULL;
q->next = p;
q = p;
}
free(p);
}while(data != 0);
printf("Result:");
while(root->next != NULL)
{

printf("%d ",root->next->value);
root = root->next;
}
free(root);
printf("\n");
return 0;
}
...全文
58 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wudong001 2003-10-16
  • 打赏
  • 举报
回复
还有这里:
do
{
p = (Inode*)malloc(sizeof(Inode));
q = p;//删除这一行
scanf("%d",&data);
if(data != 0)
{
p->value = data;
p->next = NULL;
q->next = p;
q = p;
}
free(p);//删除这一行
}
你已经把新生成的结点删除了,以后怎么输出它的值?
wudong001 2003-10-16
  • 打赏
  • 举报
回复
因为你没有赋值啊!
你是要做连表吧,但root = (Inode*)malloc(sizeof(Inode));生成头结点后,没有给
value;*next; 赋值,即也没有后续结点。后面你要输出运行中输入的值,当然没有了。
看看怎么把连表的结点连起来!注意 q 的动作!

do
{
p = (Inode*)malloc(sizeof(Inode));
q = p;//删除这一行
scanf("%d",&data);
if(data != 0)
{
p->value = data;
p->next = NULL;
q->next = p;
q = p;
}
free(p);
zgrpmc 2003-10-16
  • 打赏
  • 举报
回复
更正代码如下,可以看到其中的问题所在:

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

typedef struct node{
int value;
struct node *next;
}Inode;

int main()
{
Inode *p,*q,*root;
root = (Inode*)malloc(sizeof(Inode));
p = root;
q = root;
int data;
do
{
p = (Inode*)malloc(sizeof(Inode));
//q = p;
scanf("%d",&data);
if(data != 0)
{
p->value = data;
p->next = NULL;
q->next = p;
q = p;
}
//free(p);
}while(data != 0);
printf("Result:");
p = root;//add
while(root->next != NULL)
{

printf("%d ",root->next->value);
q = root; //add
root = root->next;
free(q); //add
}
//free(root);
free(q);
printf("\n");
return 0;
}
zgrpmc 2003-10-16
  • 打赏
  • 举报
回复
更正代码如下,可以看到其中的问题所在:

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

typedef struct node{
int value;
struct node *next;
}Inode;

int main()
{
Inode *p,*q,*root;
root = (Inode*)malloc(sizeof(Inode));
p = root;
q = root;
int data;
do
{
p = (Inode*)malloc(sizeof(Inode));
//q = p;
scanf("%d",&data);
if(data != 0)
{
p->value = data;
p->next = NULL;
q->next = p;
q = p;
}
//free(p);
}while(data != 0);
printf("Result:");
p = root;//add
while(root->next != NULL)
{

printf("%d ",root->next->value);
q = root; //add
root = root->next;
delete q; //add
}
//free(root);
free(q);
printf("\n");
return 0;
}
zgrpmc 2003-10-16
  • 打赏
  • 举报
回复
更正代码如下,可以看到其中的问题所在:

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

typedef struct node{
int value;
struct node *next;
}Inode;

int main()
{
Inode *p,*q,*root;
root = (Inode*)malloc(sizeof(Inode));
p = root;
q = root;
int data;
do
{
p = (Inode*)malloc(sizeof(Inode));
q = p;
scanf("%d",&data);
if(data != 0)
{
p->value = data;
p->next = NULL;
q->next = p;
q = p;
}
//free(p);
}while(data != 0);
printf("Result:");
p = root;//add
while(root->next != NULL)
{

printf("%d ",root->next->value);
q = root; //add
root = root->next;
delete q; //add
}
//free(root);
free(q);
printf("\n");
return 0;
}

bbgbianbaogui 2003-10-16
  • 打赏
  • 举报
回复
能够运行,就是什么也没有?
smans 2003-10-16
  • 打赏
  • 举报
回复
真的应该拖出去群殴!如此写代码,令我毛骨悚然!!
liao2001 2003-10-16
  • 打赏
  • 举报
回复
!!!
怕怕,谁写的代码呀,拉出去打!
xylr 2003-10-16
  • 打赏
  • 举报
回复
重新看指针吧!大哥
fnaps 2003-10-16
  • 打赏
  • 举报
回复
虽然看懂了,但却很累,楼主一起加油吧.
zwzplayer 2003-10-16
  • 打赏
  • 举报
回复
....
#define new(type) (type*)malloc(sizeof(type))
typedef struct node *position;
typedef struct node{
int value;
position next;
}INode;
....
这样定义之后编起来爽一点。
....汗
刚生成的结点就被free掉了,自然没东西。
PS:阁下如果在学数据结构。千万别看科学出版社出的《数据结构教程》。编者:陆松年。BUG暴多。初学的话还是看清华出的。(机械工业出版社的也不错)
Hot_Forever 2003-10-16
  • 打赏
  • 举报
回复
int value;寒
ahuu 2003-10-16
  • 打赏
  • 举报
回复
看我的吧,代码应该是这么写地:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

typedef struct node{
int value;
struct node *next;
}Inode;

void Insert(Inode *root,int nodeValue)
{
Inode *temp;
temp = (Inode*)malloc(sizeof(Inode));
temp->value = nodeValue;
temp->next = root->next;
root->next = temp;
}

void output(Inode *root)
{
while(root->next != NULL)
{

printf("%d ",root->next->value);
root = root->next;
}
}

void freeSpace(Inode *root)
{
Inode *temp;
while(root->next != NULL)
{
temp = root->next;
root->next = temp->next;
free(temp);
temp = root;
}
free(root);
}

int main()
{
Inode *root;
int data;
root = (Inode*)malloc(sizeof(Inode)); //分配内存
root->next = NULL; //注意:初始化root的后继节点
do
{
scanf("%d",&data);
if(data != 0)
{
Insert(root,data); //插入节点(这里采用前插)
}
}while(data != 0);
printf("Result:");
output(root); //输出数据
freeSpace(root); //释放内存
printf("\n");
return 0;
}

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧