C语言中把一个指针赋给另一个指针的时候为什么程序会无法执行?

原程序是这样的:
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(OVERFLOW);
p->ArrivalTime=OccurTime;
p->Duration=Durtime;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
free(p);
return OK;
编译通过了,全文都没有错误,就是运行的时候会出现错误,在Q.rear->next=p;后面加一个输出语句的时候,运行的时候没有输出,肯定是把P赋给=前面的那个指针的时候出问题了呀!

不知道楼主说的是无法执行,还是无法编译。
无法编译:两个指针类型不匹配,无法自动转换,导致编译错误。
无法执行:检查赋值指针的值是否正确。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-27
编译通过没,要是没有的话,你看看这两个指针的类型是否一样,或者被赋值的指针是否为常量指针。

要是编译通过了,你看看在赋值的过程中,有没有牵涉到空指针的访问操作。 你查看一下Q的rear指针是否为空。
第2个回答  2010-12-27
去掉Q.rear=p;这句
第3个回答  2010-12-27
o(∩_∩)o 哈哈
你把free(p)去了就够了。。
你p申请的空间是用来存数据的,你释放了还怎么存数据。所以你每次刚申请的空间,刚存完数据就释放了。当然什么数据都没有了
第4个回答  2010-12-28
Q.rear->next = p;
free(p);
会导致Q.rear->next指针乱指,在后面加上Q.rear->next = NULL;