POLARIS_1954 2022-05-19 18:10 采纳率: 0%
浏览 18

c++顺序表奇偶排序在判断奇偶过程中出现读取访问权限冲突的问题

明明没有任何错误,为什么会报访问权限冲突呢

#include <iostream>
using namespace std;
class SeqList {
public:
    SeqList(int Maxsize = 100);
    ~SeqList() { delete[]data; }
    void InitList();
    void max();
    int search(int x);
    void showList();
    int duichen();
    void paixu();
private:
    int* data;            //存放数组
    int MaxSize;           //顺序表的最大元素数
    int last;               //顺序表当前已存数据项的最后位置(≥0)
};
SeqList::SeqList(int length) //顺序表类的构造函数
{  
    if (length > 0) 
    {
        MaxSize = length;          //顺序表长度
        last = -1;                 //未存储数据时为-1
        data = new int[MaxSize];  //创建顺序表数组
    }
}
void SeqList::InitList()      //为顺序表手动赋值
{
    int i;
    cout << "请输入10个整数,用空格分开:" << '\n';
    for (i = 0; i < 10; i++)
    {
        cin >> data[i];
        last++;
    }
}
void SeqList::max()        //求顺序表的最大元素
{
    int i, m;
    m = data[0];
    for (i = 1; i < 10; i++)
    {
        if (data[i] > m)           
            m = data[i];
    }
    cout << "你输入的10个整数最大是:" << m << '\n';
    cout << '\n';
}
int SeqList::search(int x)          //查找特定的元素2
{
    for (int i = 0; i <= last; i++)
    {
        if (data[i] == x)
        {
            return 1;
        }
        
    }
    return 0;
}
void SeqList::showList()       //遍历显示顺序表
{
    for (int i = 0; i <= last; i++)
    {
        cout << data[i] << " ";
    }
    cout << endl;
}
int SeqList::duichen()         //判断顺序表是否对称
{
    if (last % 2 == 0)
    {
        for (int i = 0; i <= (last + 1) / 2; i++)
        {
            if (data[i] != data[last - i])
            {
                return 0;
            }
        }
    }
    else
    {
        for (int i = 0; i < last / 2; i++)
        {
            if (data[i] != data[last - i])
            {
                return 0;
            }
        }
    }
    return 1;
}
void SeqList::paixu()          //对顺序表进行奇偶排序,奇数排在前偶数排在后
{
    int temp;
    for (int i = 0; i <= last - 1; i++)
    {
        for (int j = i + 1; j <= last; i++)
        {
            if (data[i] % 2 == 0 && data[j] % 2 != 0)
            {
                temp = data[j];
                data[j] = data[i];
                data[i] = temp;
            }
        }
    }
}


int main()
{
    SeqList a;
    cout << "-------------创建表-------------" << endl;
    a.InitList();
    cout << "------------元素遍历------------" << endl;
    a.showList(); 
    cout << "------------最大数据------------" << endl;
    a.max();
    cout << "------------查找元素------------" << endl;
    cout << a.search(2) << endl;
    cout << "------------判断对称------------" << endl;
    cout << a.duichen() << endl;
    cout << "------------奇偶排序------------" << endl;
    a.paixu();
    a.showList();
    
}

运行结果如下

img

img


请问我应该如何解决问题呢?该做哪些改正?错误原因是什么呢?

  • 写回答

1条回答 默认 最新

  • 加油吧,小杜 2022-05-20 19:51
    关注

    数组越界了。把 j<=last 改为j<last 或者j<=last-1

    评论

报告相同问题?

问题事件

  • 创建了问题 5月19日

悬赏问题

  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号