weixin_62680436 2021-12-22 15:48 采纳率: 100%
浏览 57
已结题

读取访问权限冲突的问题

在数组上发生了读取访问权限冲突,个人觉得可能是数组越界的问题,但是找不到问题出在哪里

具体代码如下,是一个根据先序序列和中序序列建立二叉树并输出层次序列的程序

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
#define M 10000

typedef struct BiNode
{
    char data;
    struct BiNode* lchild, * rchild;
}BiNode, * BiTree;

typedef struct Queue
{
    BiTree data[M];
    int front;
    int rear;
}Queue;

void InitQueue(Queue& Q)
{
    Q.front = Q.rear = 0;
}

void EnQueue(Queue& Q, BiTree T)
{
    if ((Q.rear + 1) % M == Q.front)
        return;
    Q.data[Q.rear] = T;
    Q.rear = (Q.rear + 1) % M;
}

void DeQueue(Queue& Q, BiTree& T)
{
    if (Q.rear == Q.front)
        return;
    T = Q.data[Q.front];
    Q.front = (Q.front + 1) % M;
}

BiTree CreateBiTree(char pre[], char mid[], int l1, int r1, int l2, int r2)
{
    if (l1 <= r1)
    {
        int i = 0, llen = 0, rlen = 0;
        for (i = 0; mid[i] != pre[l1]; i++);
        llen = i - l2;
        rlen = r2 - i;
        BiTree T = new BiNode;
        T->data = pre[l1];
        T->lchild = CreateBiTree(pre, mid, l1 + 1, l1 + llen, l2, l2 + llen - 1);
        T->rchild = CreateBiTree(pre, mid, l1 + llen + 1, r1, l2 + llen + 1, r2);
    }
    else
        return NULL;
}

void LevelTraverse(BiTree T)
{
    BiTree p;
    Queue Q;
    InitQueue(Q);
    if (T)
    {
        Q.data[Q.rear] = T;
        Q.rear = (Q.rear + 1) % M;
        while (Q.front != Q.rear)
        {
            p = Q.data[Q.front];
            printf("%c", p->data);
            Q.front = (Q.front + 1) % M;
            if (p->lchild)
            {
                Q.data[Q.rear] = p->lchild;
                Q.rear = (Q.rear + 1) % M;
            }
            if (p->rchild)
            {
                Q.data[Q.rear] = p->rchild;
                Q.rear = (Q.rear + 1) % M;
            }
        }
    }
}

int main()
{
    char pre[100], mid[100];
    int n, i;
    printf("请输入结点数:\n");
    scanf_s("%d", &n);
    printf("请输入先序序列:\n");
    for (i = 0; i < n; i++)
        scanf_s("%c", &pre[i]);
    printf("请输入中序序列:\n");
    for (i = 0; i < n; i++)
        scanf_s("%c", &mid[i]);
    BiTree T = CreateBiTree(pre, mid, 0, n - 1, 0, n - 1);
    printf("层次序列如下:\n");
    LevelTraverse(T);
    return 0;
}

报错内容如图

img

请问报错的原因,该如何修改

  • 写回答

2条回答 默认 最新

  • 爱上bug的小姐姐 2021-12-22 16:20
    关注

    错误原因: for (i = 0; mid[i] != pre[l1]; i++)中 mid[i]循环越界,即在main()中并没有给它赋值。
    解决办法: for (i = 0; mid[i] != pre[l1],i<l1; i++)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月30日
  • 已采纳回答 12月22日
  • 赞助了问题酬金 12月22日
  • 创建了问题 12月22日

悬赏问题

  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)