我必须检查给定的矩阵是否具有与行相同的列,如果不是用零填充的话
我已经编写了有关行较大时蚂蚁可以工作的代码,但对于列则显示了核心转储的代码
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
答案 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
中。 filas
和cols
是传递给llenar_0
的引用,但m
不是。该函数创建nuevo
并将其分配给m
,但是该更改在返回时丢失,因此main
尝试使用具有新大小的原始数组。
更改:
void llenar_0(int **m, int &filas, int &cols){
收件人:
void llenar_0(int ** &m, int &filas, int &cols){