微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

矩阵转置与 C++ 中的指针到指针

如何解决矩阵转置与 C++ 中的指针到指针

我正在尝试在 C++ 中使用指针到指针转置矩阵,但出现错误:“分段错误('核心'转储)”。我试图在论坛上找到错误并发现在 ma​​trixTrans 函数中,'puntero_trans = new int *[nCol];'行和旁边的 for 循环,我不得不转到 getData 函数。我真的不知道为什么会这样。谢谢你的时间。我的代码如下:

#include <iostream>

void getData();
void matrixTrans(int **,int **,int,int);
void showData(int **,int);

//Global variables
int **puntero_matrix = nullptr,**puntero_trans;
int nRaws,nCol;

int main() {

    getData();
    matrixTrans(puntero_matrix,puntero_trans,nRaws,nCol);
    showData(puntero_trans,nCol);

    //Flushing memory...
    for (int i = 0; i < nRaws; ++i) {
        delete[] puntero_matrix[i];
    }
    for (int i = 0; i < nCol; ++i) {
        delete[] puntero_trans[i];
    }

    delete[] puntero_matrix;
    delete[] puntero_trans;


    std::cin.get();
    return 0;
}

void getData() {
    std::cout << "Please enter the number of raws:"; std::cin >> nRaws;
    std::cout << "Please enter the number of columns: "; std::cin >> nCol;

    puntero_matrix = new int* [nRaws];
    for (int i = 0; i < nRaws; ++i) {
        puntero_matrix[i] = new int[nCol];
    }

    for (int i = 0; i < nRaws; ++i) {
        for (int j = 0; j < nCol; ++j) {
            std::cout << "Please enter value for [" << i << "][" << j << "]: "; std::cin >> *(*(puntero_matrix + i) + j);
        }
    }
}

void matrixTrans(int **puntero_matrix,int **puntero_trans,int nRaws,int nCol) {

    puntero_trans = new int *[nCol];
    for (int i = 0 ; i < nCol; ++i) {
        puntero_trans[i] = new int[nRaws];
    }

    for (int i = 0; i < nRaws; ++i) {
        for (int j = 0; j < nCol; ++j) {
            *(*(puntero_trans + j) + i) = *(*(puntero_matrix + i) + j);
        }
    }
}

void showData(int **puntero_trans,int nCol) {
    for (int i = 0; i < nCol; ++i) {
        for (int j = 0; j < nRaws; ++j) {
            std::cout << *(*(puntero_trans + i) + j) << " ";
        }
        std::cout << std::endl;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。