首页 新闻 赞助 找找看

一个莫名其妙的指针越界问题

0
[待解决问题]

没有用到指针,怎么会越界的?

在写顺序队列的时候,代码如下:

#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()中出现错误如下

中二病重度的主页 中二病重度 | 菜鸟二级 | 园豆:202
提问于:2017-10-23 18:16
< >
分享
所有回答(1)
0

你这代码有两个问题

一、函数 InitQueue里面的Q = (SqQueue *)malloc(sizeof(SqQueue));要注释掉

注释掉是因为你这里申请的空间是临时变量Q的,不是你真正传进来的,而且你这里申请动态空间也没什么用,本身就有个对象了。

二、函数EnQueue里面的if(q.rear = MAXSIZE)要改成if(q.rear == MAXSIZE)

amwpynnpyu | 园豆:214 (菜鸟二级) | 2017-10-24 14:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册