Почему моя функция отображения не выполняет транспонирование матриц структур C ?

#c #matrix #struct

Вопрос:

Моя программа заключается в том, чтобы выполнить транспонирование матрицы и отобразить ее с помощью структур. Я использую указатель на структуры в каждой функции, просто для практики, хотя я мог бы сделать это, просто передав структуру или по ссылке. Программа работает нормально до тех пор, пока не появится функция inputMatrix. Программа принимает входные данные, а затем завершает выполнение без каких-либо выходных данных.

Что я точно знаю, так это то, что проблема заключается в функции отображения или структуре, которую я создаю в main(которая имеет конечный результат).

Мой код приведен ниже:

 #include <iostream>
#include <iomanip>

using namespace std;

struct Matrix
{
    int **data;
    int rows;
    int columns;
};

void createMatrix(Matrix *mat)
{
    mat->data = new int *[mat->rows];
    for (int i = 0; i < mat->columns; i  )
    {
        mat->data[i] = new int[mat->columns];
    }
}

void inputMatrix(Matrix *mat)
{
    for (int i = 0; i < mat->rows; i  )
    {
        for (int j = 0; j < mat->columns; j  )
        {
            cout << "Enter element of row " << i   1 << " and column " << j   1<<endl;
            cin >> mat->data[i][j];
        }
    }
}
Matrix transpose(Matrix* mat)
{
    Matrix transpose;
    transpose.rows = mat->rows;
    transpose.columns = mat->columns;
    for (int i = 0; i < mat->rows;i  )
    {
        for(int j = 0;j<mat->columns;j  )
        {
            transpose.data[i][j] = mat->data[j][i];
        }
    }
    return transpose;
}

void display(Matrix* mat)
{
    for(int i = 0;i<mat->rows;i  )
    {
        for(int j = 0;j<mat->columns;j  )
        {
            cout<<setw(3)<<mat->data[i][j];
        }
        cout<<endl;
    }
}
int main()
{
    Matrix mat;
    cout<<"Enter the rows of matrix: n";
    cin>>mat.rows;
    cout<<"nEnter the columns of matrix: n";
    cin>>mat.columns;

    createMatrix(amp;mat);
    inputMatrix(amp;mat);
    cout<<endl;
    Matrix trans = transpose(amp;mat);
    display(amp;trans);
    
    
    return 0;
}
 

Комментарии:

1. В вашей функции transpose , для чего вы выделяете место transpose.data ?

Ответ №1:

Проблема заключалась в транспонировании функций, мне нужно было выделить память для Matrix transpose Код приведен ниже:

 Matrix transpose(Matrix* mat)
{
    Matrix transpose;
    transpose.rows = mat->rows;
    transpose.columns = mat->columns;
    
    createMatrix(amp;transpose);
    
    for (int i = 0; i < mat->columns;i  )
    {
        for(int j = 0;j<mat->rows;j  )
        {
            transpose.data[i][j] = mat->data[j][i];
        }
    }
    return transpose;
}