#include<stdio.h>
#include<stdlib.h>
typedef int QueueType;
typedef struct Queue {
int front;
int rear;
int queueSize;
QueueType* base;
}Queue;
//初始化
void InitQueue(Queue* q,int QueueSize) {
q->base = (QueueType*)malloc(QueueSize*sizeof(QueueType));
if (q->base == NULL) {
return;
}
q->front = 0;
q->rear = 0;
q->queueSize = QueueSize;
}
int main(void) {
Queue* q;
int size = 10;
InitQueue(&q, size);
}
这样初始化一个循环队列,而在主函数里为什么Queue* q程序崩溃,而Queue q就能运行呢
你出错的原因是
*q
没有正确初始化,你应该初始化后再处理。正确的完整调用方法是:而
Queue* q后面加一个malloc函数,使其初始化,就正确了,总的来说代码写的很棒,继续加油
所以,正确代码为:
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
声明了一个指针,但是没有给他实际分配空间,所以会崩溃。打个比方,给你把钥匙,让你去开 260 号柜放东西,结果你去一看,260 号位置只画了个框,根本没做柜子。当然实际的情况更像是 260 号还放着别人的东西,你把你的东西放进去,把别人的东西干掉了,结果别人来取的时候就崩溃了。
而
Queue q
是声明的实体,是分配了空间并进行初始化之后的结构体数据,是可用的。