Schuroankes 2020-09-01 17:39 采纳率: 0%
浏览 1804

C++ 读取访问权限冲突: 报错0x1110112,应该是什么问题?

C++ 读取访问权限冲突:
报错0x1110112

#include <iostream>
#include <string>
using namespace std;

class Mat {
public:
    int* data;                                   
    int m, n;                                               //行列指标
    Mat() { data = NULL; m = 0; n = 0; }         
    Mat(int number1);                            //方阵构造
    Mat(int number2, int numner3);               //一般矩阵构造
    Mat operator+(const Mat& Mat2);              //加法重载
    Mat operator-(const Mat& Mat4);              //减法重载      
    Mat operator<<(const Mat& Mat5);             //打印输出

    Mat::Mat(int number1) {                                 //方阵构造
    m = number1;
    n = number1;
    int number4; 
    int i = 1;
    int j = 1;
    int* data = new int[m * n];
    for (; (i <= m && j <= n);) {
        number4 = (j - 1) * m + i - 1;
        cin >> data[number4];
        if (i == m) { i = 1; j++; }
        else { i++; }
    }
}

Mat::Mat(int number2, int numner3) {                   //一般矩阵构造
    m = number2;
    n = numner3;
    int number5;
    int* data = new int[m * n];
    int i = 1;
    int j = 1;
    for (; (i <= m && j <= n);) {
        number5 = (j - 1) * m + i - 1;
        cin >> data[number5];
        if (i == m) { i = 1; j++; }
        else { i++; }
    }
}

Mat Mat:: operator+(const Mat& Mat2) {                  //加法重载
    Mat Mat1;
    if (this->m == Mat2.m && this->n == Mat2.n) {
        for (int i = 0; i <= (Mat1.m * Mat1.n - 1); i++) {
            Mat1.data[i] = this->data[i] + Mat2.data[i];
        }
    }
    else cout << "两个矩阵行、列数不完全相同,不能相加" << endl;
    return Mat1;
}


Mat Mat:: operator-(const Mat& Mat4) {                   //减法重载
    Mat Mat3;
    if (this->m == Mat4.m && this->n == Mat4.n){
        for (int i = 0; i <= (Mat3.m * Mat3.n - 1); i++) {
            Mat3.data[i] = this->data[i] - Mat4.data[i];
        }
    }
    else { cout << "两个矩阵行、列数不完全相同,不能相减" << endl; }
    return Mat3;
}

int& Mat::at(int m1, int n1) {                           //at函数
    int number6 = 0;
    int& number8 = number6;
    if (m1 < m && n1 < n && m1 >= 0 && n1 >= 0) {
        number6 = m1 * m + n1;
        return data[number6];
    }
    else { cout << "元素行列指标超出矩阵范围" << endl;
    return number8;
    }
}

void Mat::resize(int m2, int n2) {                      //resize函数
    delete [] data;
    m = m2;
    n = n2;
    int* data = new int[m * n];
}

ostream & operator<<(ostream & os , const Mat& Mat5){    //打印输出
    int number7;
    for (int i = 0; i <= Mat5.m-1 ; i++) {
        for (int j = 0;j <= Mat5.n-1; j++) {
            number7 = j  *  Mat5.m + i ;
            os << Mat5.data[number7] << " ";  //报错出现在这里,检查数组似乎没有越界,难道是os用的不对吗?
        }
    }
    return os;
}

int main() {
    int a = 3;
    int b = 2;
    int c = 5;
    int d = 6;
    Mat m1(a);               //方阵构造
    cout << m1 << endl;  //报错是运行到这里发生的,后面的没有运行,编译通过了
    。。。。。。
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-09-01 18:16
    关注

    和os没有什么关系,应该是number7越界或者Mat5.data指向的内容没有初始化。

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料