用零填充矩阵行的问题

时间:2019-03-26 14:30:07

标签: c++

我必须检查给定的矩阵是否具有与行相同的列,如果不是用零填充的话

我已经编写了有关行较大时蚂蚁可以工作的代码,但对于列则显示了核心转储的代码

     if(filas < cols){
        //note filas means rows
        //reserve of memory
        int **nuevo = new int *[cols];
        for(int i = 0; i < cols; i++)
            nuevo[i] = new int [cols];


        //start new matrix to 0
        for(int i = 0; i < cols; i++){
            for(int j = 0; j < cols; j++)
                nuevo[i][j] = 0;
        }

        //copy original matrix to new
        for(int i = 0; i < filas; i++){
            for(int j = 0; j < cols; j++)
                nuevo[i][j] = m[i][j];
        }



        filas = cols;

        m = nuevo;

    }




actual output:
1 2 3 4 
2 4 6 8 
3 6 9 12 
Segmentation fault (core dumped)

expected:
1 2 3 4 
2 4 6 8 
3 6 9 12 
0 0 0 0

当行大于列时:

original:
1 2 3  
2 4 6  
3 6 9  
4 8 12



output:
1 2 3 0 
2 4 6 0 
3 6 9 0 
4 8 12 0

3 个答案:

答案 0 :(得分:1)

问题在于必须初始化行main()

更改

int filas = 3, cols = 4;
int **m = new int *[filas];
for(int i = 0; i < filas; i++)
    m[i] = new int [filas];

进入

int filas = 3, cols = 4;
int **m = new int *[cols];
for(int i = 0; i < cols; i++)
    m[i] = new int [filas];

答案 1 :(得分:0)

如果您只想将给定的矩阵复制到方矩阵-

int n = filas;
if ( filas < cols) {
    n = cols;
}

int **nuevo = new int *[n];
for (int i = 0; i < n; ++i) {
    nuevo[i] = new int [n];
}

for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) {
        nuevo[i][j] = 0;
    }
}

for (int i = 0; i < filas; ++i) {
    for (int j = 0; j < cols; ++j) {
        nuevo[i][j] = m[i][j];
    }
}

nuevo是新矩阵。希望对您有所帮助,谢谢

答案 2 :(得分:0)

崩溃没有发生在llenar_0中,而是发生在main中。 filascols是传递给llenar_0的引用,但m不是。该函数创建nuevo并将其分配给m,但是该更改在返回时丢失,因此main尝试使用具有新大小的原始数组。

更改:

void llenar_0(int **m, int &filas, int &cols){

收件人:

void llenar_0(int ** &m, int &filas, int &cols){