Продолжайте получать "cygwin_exception :: open_stackdumpfile", динамически выделяя двумерный массив в классе - PullRequest
0 голосов
/ 02 марта 2019

Итак, я пытался написать эту программу, где мне необходимо использовать динамически распределяемые массивы для распечатки 2-мерной матрицы.Я только для записи файлов cpp и не разрешено изменять что-либо в заголовочных файлах.Я продолжаю получать исключение «0 [main] review2_cis17c_objectarray 4018 cygwin_exception :: open_stackdumpfile: трассировка стека дампов в review2_cis17c_objectarray.exe.stackdump».Я относительно новичок в изучении c ++;после размышления я думаю, что что-то не так в моем PlusTab.cpp, где я пытаюсь назначить выделенный адрес массиву, определенному конструктором в классе.Может кто-нибудь, пожалуйста, помогите и дайте мне знать, здесь я сделал неправильно в проекте?Большое спасибо!!

AbsRow.h:
class AbsRow{
    protected:
        int size;
        int *rowData;
    public:
        virtual int getSize()const = 0;
        virtual int getData(int)const = 0;
};



AbsTabl.h:
class AbsTabl{
    protected:
        int szRow;
        int szCol;
        RowAray **columns;
    public:
        virtual int getSzRow()const = 0;
        virtual int getSzCol()const = 0;
        virtual int getData(int,int)const = 0; };



  PlusTab.h
class PlusTab:public Table{
    public:
        PlusTab(unsigned int r,unsigned int c):Table(r,c){};
        PlusTab operator+(const PlusTab &);
};



  RowAray.h
class RowAray:public AbsRow{
    public:
        RowAray(unsigned int);
        virtual ~RowAray();
        int getSize()const{return size;}
        int getData(int i)const{
            if(i>=0&&i<size)return rowData[i];
            else return 0;}
        void setData(int,int);
};





 Table.h
    #include "AbsTabl.h"
`enter code here`class Table:public AbsTabl{
    public:
        Table(unsigned int,unsigned int);
        Table(const Table &);
        virtual ~Table();
        int getSzRow()const {return szRow;}
        int getSzCol()const {return szCol;}
        int getData(int,int)const;
        void setData(int,int,int);
};



  PlusTab.cpp:
    #include "PlusTab.h"

PlusTab PlusTab::operator+(const PlusTab &t) {
    PlusTab tab(this->getSzRow(), this->getSzCol());

    for(int i = 0; i < tab.getSzRow(); i++) {
        for (int j = 0; j <tab.getSzCol(); j++) {
            (tab.columns[i])->setData(j, this->getData(i,j) + t.getData(i,j));
        }
    }

    return tab;
}

    RowAray.cpp:
   #include "RowAray.h"

RowAray::RowAray(unsigned int c) {
    size = c;

    rowData = new int[c];
}

RowAray::~RowAray() {
    delete []rowData;
}

void RowAray::setData(int i, int value) {
   rowData[i] = value;
}
    Table.cpp:


#include "Table.h"
#include <cstdlib>
Table::Table(unsigned int r, unsigned int c) {

    szRow = r;
    szCol = c;

    columns = new RowAray*[r];

    for (int i = 0; i < r; i++) {
        columns[i] = new RowAray(c);
    }

    for (int i = 0; i < r; i++) {
        for (int j = 0; j < c; j++) {
            columns[i]->setData(j, (rand()%90 + 10));
        }
    }
}

Table::~Table() {
    for (int i = 0; i < szRow; i++) {
        delete []columns[i];
    }
    delete []columns;
}

Table::Table(const Table &t) {
    szRow = t.szRow;
    szCol = t.szCol;
    columns = t.columns;
};

int Table::getData(int r ,int c) const {
    return columns[r]->getData(c);
};

void Table::setData(int r, int c, int value) {
    columns[r]->setData(c,value);
}

и, наконец, мой main.cpp, который я тоже не могу изменять.

 #include <ctime>
#include <iostream>
#include <iomanip>
using namespace std;

//User Libraries
#include "PlusTab.h"

//Global Constants

//Function Prototype
void prntTab(const Table &);

//Execution Begins Here!
int main(int argc, char** argv) {
   //Initialize the random seed
   srand(static_cast<unsigned int>(time(0)));

   //Declare Variables
   int rows=3,cols=4;

   //Test out the Tables
   PlusTab tab1(rows,cols);
   PlusTab tab2(tab1);
   PlusTab tab3=tab1+tab2;

  // Print the tables
   cout<<"Abstracted and Polymorphic Print Table 1 size is [row,col] = ["
           <<rows<<","<<cols<<"]";
   prntTab(tab1);
   cout<<"Copy Constructed Table 2 size is [row,col] = ["
           <<rows<<","<<cols<<"]";
   prntTab(tab2);
   cout<<"Operator Overloaded Table 3 size is [row,col] = ["
           <<rows<<","<<cols<<"]";
   prntTab(tab3);

   //Exit Stage Right
   return 0;
}

void prntTab(const Table &a){
    cout<<endl;
    for(int row=0;row<a.getSzRow();row++){
        for(int col=0;col<a.getSzCol();col++){
            cout<<setw(4)<<a.getData(row,col);
        }
        cout<<endl;
    }
    cout<<endl;
}

Я прошу прощения за это огромное количество кода.Это мой первый пост, научусь пользоваться сайтом!Я ценю вашу помощь:)

...