没有用到指针,怎么会越界的?
在写顺序队列的时候,代码如下:
#include<stdlib.h> #include<stdio.h> #define MAXSIZE 50 #define ElemType int typedef struct{ ElemType data[MAXSIZE]; int head ,rear; }SqQueue; void InitQueue(SqQueue * Q){ Q = (SqQueue *)malloc(sizeof(SqQueue)); Q->head = Q->rear = 0; } bool QueueEmpty(SqQueue *Q){ return (Q->head == Q->rear); } int EnQueue(SqQueue &q,ElemType e){ if(q.rear = MAXSIZE) return 0; q.data[q.rear] = e; q.rear++; return 1; } int DeQueue(SqQueue &q,ElemType &e){ if(q.head==q.rear) return 0; e = q.data[q.head]; q.head++; return e; } int main(){ SqQueue Q; int e,i; InitQueue(&Q); for( i=1;i<4;i++){ EnQueue(Q,i); } for( i=1;i<5;i++){ printf("%d",DeQueue(Q,e)); } }
程序编译通过,但是无法运行,进行调试,在EnQueue()函数中正常,但是在DeQueue()中出现错误如下
你这代码有两个问题
一、函数 InitQueue里面的Q = (SqQueue *)malloc(sizeof(SqQueue));要注释掉
注释掉是因为你这里申请的空间是临时变量Q的,不是你真正传进来的,而且你这里申请动态空间也没什么用,本身就有个对象了。
二、函数EnQueue里面的if(q.rear = MAXSIZE)要改成if(q.rear == MAXSIZE)