C++运行不通过,但是找不到bug在哪里

并没有报错,但是就是不能通过,执行不了,就是找不大搜bug在哪里,请各位大佬给我看看,最好在附上vs的详细调试方法!

程序清单 matrix_h

#ifndef MATRIX_H_
#define MATRIX_H_

class matrix
{
public:
    matrix();
    matrix(int l, int w, int *n);
    matrix operator+(matrix &m1);
    void putmatrix();//输出矩阵
    ~matrix();
private:
    int *num;
    int length;
    int width;
};

#endif

程序清单 matrix_cpp

#include<iostream>
#include"matrix.h"
using namespace std;

matrix::matrix()//无参构造函数
{
   num = new int[length*width];
   num = { 0 };
}

matrix::matrix(int l, int w, int *n)//重载构造函数
{
    int i;
    length = l;
    width = w;
    num = new int[length*width];
    int *p = num;
    for (i = 0; i<length*width; i++)
    {
        *p++ = *n++;
    }
}

matrix matrix::operator+(matrix &m1)
{
    matrix m2;
    for (int i = 0; i < length*width; i++)
        {
        m2.num[i] = num[i] + m1.num[i];
        }
    return m2;
}

void matrix::putmatrix()//输出矩阵
{
    for (int i = 0; i<length*width; i++)
    {
        cout << num[i] << "  ";
        if ((i + 1)%width == 0)
            cout << endl;
    }
}

matrix::~matrix()
{
    delete[]num;
}

程序清单 main_cpp

#include<iostream>
#include"matrix.h"
using namespace std;

int main()
{
    int arry1[2][2] =
    {
        { 1, 2 },
        { 4, -5 }
    };
    int arry2[2][2] =
    {
        { 3,-1},
        { 0,9}
    };
    matrix mt1(2, 2, *arry1);
    matrix mt2(2, 2, *arry2);
    matrix mt3;
    mt3 = mt1 + mt2;
    cout << "this is the first matrix arry1[2][2]:"<< endl;
    mt1.putmatrix();
    cout << "this is the first matrix arry2[2][2]:" << endl;
    mt2.putmatrix();
    cout << "this is the first matrix arry3[2][2]=arry1[2][2]+arry2[2][2]:" << endl;
    mt3.putmatrix();

    getchar();
    return 0;
}
阅读 2.7k
2 个回答

matrix mt3;
mt3 = mt1 + mt2;这两行改为matrix mt3 = mt1 + mt2;
num = { 0 };这行去掉

樓上的答案好像不完對
這樣還是不能運行:
num=[0};這是錯的 指標不能如此初始化,其實沒初始化還是ok的,所以這句還是要去掉
但是你 建構子& 除構子還有問題,各少了一句話,導致不能運行

抱歉那天沒寫上

建構子
matrix::matrix()//无参构造函数
{

length = 2, width = 2;
num = new int[length*width];

}

除構子
matrix::~matrix()
{

if (!num)
delete[] num;

}
這樣就可以了,其他的其實可改寫更簡略,但這樣可以運行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题