2401_83908491 2024-04-10 04:35 采纳率: 0%
浏览 13

访问位置冲突报错,应该如何解决

img

img

img

img

img


执行完加法后,想执行乘法时87行报错访问位置冲突。不执行加法只执行乘法时程序最后报错访问位置冲突,

  • 写回答

5条回答 默认 最新

  • 关注

    上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    问题描述:

    在矩阵应用程序中,执行加法后,想要执行乘法时,87行出现“访问位置冲突”的错误。不执行加法,只执行乘法时,程序在最后一行报错“访问位置冲突”。

    解决方案:

    1. 检查代码逻辑:尝试把错误行87之前的代码查看一下,能否定位到逻辑错误,是否少传了一个参数,或者参数传递顺序有问题。

    2. 检查内存分配是否正确:在构造函数中检查是否已正确为矩阵分配内存,确保p[i][j]已被分配到正确的地址,在进行矩阵运算时不要超过其内存限制。

    3. 调整运算顺序:错误提示“访问位置冲突”,通常是因为程序在处理访问某个位置时,试图访问了超出其范围的空间。可以尝试调整计算顺序,比如先计算乘法再计算加法,或者缩小矩阵的尺寸,以避免内存溢出。

    4. 检查参数是否正确:如果已经检查了代码逻辑和内存分配等问题,可以重点关注输入参数的正确性。查看所有需要传递的参数是否已正确设置,并检查输入矩阵是否存在空指针或尺寸不匹配的问题。

    已修改的代码:

    #include<iostream>
    using namespace std;
    
    class jz {
    private:
        int r, c;
        int **p;
    
    public:
        jz(int m, int n);     // 构造函数
    
        void input();
        void output();
    
        jz jia(jz a, int r, int c);
        jz jian(jz a, int r, int c);
        jz ji(jz a, int r, int c);
    };
    
    jz::jz(int m, int n) :r(m), c(n) {
        p = new int*[r];
        for (int i = 0; i < r; i++) {
            p[i] = new int[c];
        }
    }
    
    void jz::input() {
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                cout << "请输入第 " << i + 1 << " 行,第 " << j + 1 << " 列的数:";
                cin >> p[i][j];
                cout << endl;
            }
        }
    }
    
    void jz::output() {
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                cout << p[i][j]<< " ";
            }
            cout << endl;
        }
    }
    
    jz jz::jia(jz a, int r, int c) {
        jz temp(r, c);
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                temp.p[i][j] = p[i][j] + a.p[i][j];
            }
        }
        return temp;
    }
    
    jz jz::jian(jz a, int r, int c) {
        jz temp(r, c);
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                temp.p[i][j] =p[i][j]-a.p[i][j];
            }
        }
        return temp;
    }
    
    jz jz::ji(jz a, int r, int c) {
        jz temp(r, a.c);
        for (int i = 0; i < r; i++) {
            for (int j = 0; j < a.c; j++) {
                temp.p[i][j] = 0;
                for (int s = 0; s < c; s++) {
                    temp.p[i][j] += p[i][s] * a.p[s][j];
                }
            }
        }
        return temp;
    }
    
    int main() {
        int ma, na, mb, nb, q;
        cout << "请输入A矩阵的行与列:";
        cin >> ma >> na;
        cout << endl;
        jz jzA(ma, na);
        cout << "请创建矩阵A" << endl;
        jzA.input();
        jzA.output();
    
        cout << "请输入B矩阵的行与列:";
        cin >> mb >> nb;
        cout << endl;
        jz jzB(mb, nb);
        cout << "请创建矩阵B" << endl;
        jzB.input();
        jzB.output();
    
        if (na != mb) {
            cout << "矩阵 A 和 B 的列数与行数不匹配,无法进行矩阵乘法!" << endl;
        }
        else {
            jz jzC = jzA.ji(jzB, ma, na);
            cout << "矩阵乘法的结果是:" << endl;
            jzC.output();
        }
    
        cout << "是否进行加法?(1-是,0-否)";
        cin >> q;
        if (q != 0) {
            jz jzD = jzA.jia(jzB, ma, na);
            cout << "矩
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月10日

悬赏问题

  • ¥15 网友们我该怎么办啊,急
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 目标跟踪,计算机视觉
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡
  • ¥20 基于MATLAB的TDOA