怪事发生了??

zhwb36 2003-05-22 07:43:19
class Queue{
private:
Node *Head,*Tail;//Node 是我定义的一个类,与我的问题无关
public :
Queue(){Head=NULL;Tail=NULL;}
void AppendNode(Node*);
~Queue(){}
};
void Queue::AppendNode(Node *node){
if(Head ==0){
Tail=node;
Head=Tail;//这是问题的根源,但不知为什么
return;
}
}
Queue q;
Node *node;
q.AppendNode(node);

在AppendNode中,如果我没有Head=Tail这一句就没有问题,只要有对Head的赋值就会出现指针出错的问题.不知这是为什么?
...全文
27 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
David2008 2003-05-22
  • 打赏
  • 举报
回复
对了
我发现你的程序在vc6.0里没有编译,连接错误
你要实现什么?
我不知道你的目的
而且,你的程序没有注释,习惯不好
David2008 2003-05-22
  • 打赏
  • 举报
回复
我看看
zhwb36 2003-05-22
  • 打赏
  • 举报
回复
#include "string.h"
class Pcb{
private:
int Pid;
char *Pname;
int Ppriority;
int Ptime;
char *Pstatus;
public:
Pcb(int Pid,char *Pname,int Ppriority,int Ptime,char*Pstatus){
this->Pname=new char[strlen(Pname)+1];
this->Pstatus=new char[strlen(Pstatus)+1];
this->Pid=Pid;
strcpy(this->Pname,Pname);
this->Ppriority=Ppriority;
this->Ptime=Ptime;
strcpy(this->Pstatus,Pstatus);
}
char* getPname(){
return Pname;
}
int getPpriority(){
return Ppriority;
}
int getPtime(){
return Ptime;
}
char *getPstatus(){
return Pstatus;
}
};

class Node{
private:
Pcb *Info;
Node *Prev,*Next;
public:
Node():Info(0),Prev(0),Next(0){}
Node(Node &node)
{
Info=node.Info;
Prev=node.Prev;
Next=node.Next;
}
void FillInfo(Pcb *obj){Info=obj;}
friend class Queue;
};
class Queue{
private:
Node *Head,*Tail;
public :
Queue(){Head=NULL;Tail=NULL;}
void AppendNode(Node*);
~Queue(){}
};


#include "process.h"
#include "iostream.h"

void Queue::AppendNode(Node *node){
if(Head ==0){
Tail=node;
Head=Tail;
return;
}
Tail->Next=node;
node->Prev=Tail;
Tail=node;
}

#include "iostream.h"
#include "process.h"
#include "string.h"

Queue all_queue,ready_queue;
void main(){
void pcbcreat(Pcb *);
Pcb *P1;
P1=new Pcb(1,"p1",2,2,"Ready");

pcbcreat(P1);

}
void pcbcreat(Pcb *pcb){
Node *pn;
pn=new Node;
pn->FillInfo(pcb);
all_queue.AppendNode(pn);

if(strcmp(pcb->getPstatus(),"Ready")==0)
ready_queue.AppendNode(pn);
}


我已经调了好多次了,只要没有那句对Head的赋值就没问题.
koutyayh 2003-05-22
  • 打赏
  • 举报
回复
把全部代码贴出来吧,一起分析以下,好像上面的代码已经没有问题了!
koutyayh 2003-05-22
  • 打赏
  • 举报
回复
如果已经初始化了,那好像没有问题了?其他几位怎么看?
yuanhen 2003-05-22
  • 打赏
  • 举报
回复


理由同上!
zhwb36 2003-05-22
  • 打赏
  • 举报
回复
我忘写了.node我已经初始话了.我只是没有把那个语句写出来.
koutyayh 2003-05-22
  • 打赏
  • 举报
回复
你在调用的时候就是象后3行那么写的吗?node好像还没有分配内存吧!添加node=new Node;
后再试试
xumiao001982 2003-05-22
  • 打赏
  • 举报
回复
这句话 Node *node; 只是定义了一个指向NODE类型的指针,但你没有初始化,或是分配空间就使用这是很危险的,所以会出错,你可以使用 malloc函数分配空间

69,382

社区成员

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

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