>  Q&A  >  본문

java - c++ 数据结构这个错在哪了,动态存储?

找了半天了,麻烦帮我看下。

///////////头文件
#ifndef POSTMASTER_H_INCLUDED
#define POSTMASTER_H_INCLUDED

#include<iostream>
#include <stdio.h>
#include <tchar.h>
using namespace std;
class Matrix
{
    int rows, columns;
    int **element;

    void init(int rows, int columns);

public:
    
    Matrix(int rows, int columns,int x);
    ~Matrix();

    friend ostream& operator<<(ostream& out, Matrix&);
    

};

#endif // POSTMASTER_H_INCLUDED


////////////////////.cpp
#include "wine.h"

void Matrix::init(int rows, int columns)
{
    element = new int*[rows];
    this->rows = rows;
    this->columns = columns;
    for (int i = 0;i < columns;i++)
    {
        element[i] = new int[columns];
    }
}


Matrix::Matrix(int rows, int columns, int x)
{
    this->init(rows, columns);
    cout << "1";
    for (int i = 0;i < rows;i++)
        for (int j = 0;j < columns;j++) 
        {
            element[i][j]=x;                 ///这里貌似出错了?
        }

}

Matrix::~Matrix()
{
    for (int i = 0;i < rows;i++)
    {
        delete element[i];            //delete[] element[i];  ?
    }
    delete element;
}

ostream& operator<<(ostream& os, Matrix&a)
{
    os<< "矩阵(" << a.rows << "," << a.columns << "):" << endl;
    for (int i = 0;i < a.rows;i++)
    {
        os<< endl;
        for (int j = 0;j < a.columns;j++)
            os << a.element[i][j]<<"   ";
    }
    return os;

}


//////////////////main()
#include "wine.h"
#include "wine.cpp"
#include<iostream>
#include<cstdlib>
using namespace std;

int main()
{
    int b[3][2] = { 1,2,3,4,5,6 };

    Matrix a(3,2,4);
    cout << a;

    system("PAUSE");
    return 0;
}
怪我咯怪我咯2743일 전398

모든 응답(2)나는 대답할 것이다

  • 大家讲道理

    大家讲道理2017-04-18 10:55:42

    오류의 핵심은 다음 줄입니다.

    으아악

    이러한 주소 지정 방법은 요소(첫 번째 주소)+i*sizeof(int*)+j*sizeof(int)에 액세스하려고 시도합니다.
    순종적으로 사용하는 것이 좋습니다:

    으아악

    더 안정적이며 컴파일러마다 해석 방법이 다르다는 것을 두려워하지 않습니다.

    회신하다
    0
  • 迷茫

    迷茫2017-04-18 10:55:42

    for (int i = 0;i < columns;i++)
    改为
    for (int i = 0;i <rows;i++)

    회신하다
    0
  • 취소회신하다