#include<stdio.h> #include<stdlib.h> typedef struct LinkQueue { int data; struct LinkQueue *next; }LinkQueue,*LinkStr; typedef struct Link{ LinkStr front; LinkStr rear; }Link; Link* InitQueue(Link* q); void EnterQueue(Link* q); int main(void) { Link* queue = NULL; queue=InitQueue(queue); EnterQueue(queue); return 0; } //初始化 Link* InitQueue(Link* q) { q->front=q->rear= (LinkStr)malloc(sizeof(LinkQueue)); q->front->next = NULL; return q; } //入队列 void EnterQueue(Link* q) { LinkQueue *number = NULL; number = (LinkQueue*)malloc(sizeof(LinkQueue)); int n = 0; int flag = 1; printf("请输入元素:"); while (flag) { scanf("$%d", &n); if (n != -1) { number->data = n; q->rear->next = number; q->rear = number; } else { flag = 0; } } }
为啥有这种情况,已经困扰一下午了。。。。。。
你的scanf的%d前多了一个$
去掉之后就正常运行了
另外initqueue函数中少了malloc,这一点楼上已经提到了,就不再说了
@计算机知识杂谈: 万分感谢!!,我的大问题。。。
报错说了, nullptr, 函数参数传的是NULL
Link* InitQueue(Link *_) {
Link *q = malloc(sizeof(*q));
q->front = malloc(sizeof(*q->front));
q->rear = malloc(sizeof(*q->rear));
return q;
}
那是不是我应该先对q这个变量分配内存空间
Link* InitQueue(Link* q) { q = (Link*)malloc(sizeof(Link)); q->front=q->rear= (LinkStr)malloc(sizeof(LinkQueue)); q->front->next = NULL; return q; }
我这样写后,程序虽然不报错了,但是下面的那个while就会陷入死循环。。。。。