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){