C++ 用零填充矩阵行的问题

C++ 用零填充矩阵行的问题,c++,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

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

我已经为行更大的情况编写了代码,但对于列,它显示核心转储

     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

问题在于行的初始化必须等于
main()中的filas

改变

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=新int*[filas];
对于(int i=0;i
进入

int filas = 3, cols = 4;
int **m = new int *[cols];
for(int i = 0; i < cols; i++)
    m[i] = new int [filas];
int filas=3,cols=4;
int**m=新int*[cols];
for(int i=0;i
如果您只想将给定矩阵复制到一个方阵-

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];
    }
}
int n=filas;
if(filas

新矩阵是新矩阵。希望这有帮助,谢谢

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

更改:

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


您需要决定哪个索引(第一个或第二个)是行,哪个是列,并坚持这一点。您的代码似乎一直在它们之间切换。@interjay第一个索引是行,第二个是列,因此这些行是较小的tan列,我想将总计行“扩展”为总计columns@interjay目的是当
filas
时,将
filas
设置为
cols
。然而,我需要一段时间才能得到它,但我第三眼看不出有什么错误。然而,这很烦人,但并不是什么导致崩溃的原因
void llenar_0(int **m, int &filas, int &cols){
void llenar_0(int ** &m, int &filas, int &cols){