C++ 在C+中打印使用新方法制作的二维阵列+;
我正在尝试制作一个打印2d数组的函数。 这是我的密码:C++ 在C+中打印使用新方法制作的二维阵列+;,c++,arrays,C++,Arrays,我正在尝试制作一个打印2d数组的函数。 这是我的密码: void print_matrix(float*** mat, int dim01, int dim02){ for(int i=0; i<dim01; i++){ for(int j=0; j<dim02; j++){ cout<<*mat[i][j]<<" "; } cout<<endl; } } 这也引发了一个分段错误,是3617而不是299
void print_matrix(float*** mat, int dim01, int dim02){
for(int i=0; i<dim01; i++){
for(int j=0; j<dim02; j++){
cout<<*mat[i][j]<<" ";
}
cout<<endl;
}
}
这也引发了一个分段错误,是3617而不是2999
我只是想说清楚。在第一个函数中,我传递了数组的地址,但在第二个函数中,我只传递了数组
我在这里犯的错误是什么。我知道分割错误是因为内存管理错误,但我找不到它
整个代码如下所示:
#include<iostream>
using namespace std;
//some useful functions
float** cofactor(float**, int, int, int);
void input_matrix(float**, int, int);
void print_matrix(float**, int, int);
//main
int main(){
int size;
int a,b;
float** arr01; float** arr02;
cout<<"Size of matrix : ";
cin>>size;
input_matrix(arr01,size,size);
cout<<endl<<"Input Successful..."<<endl;
/*
cout<<"Enter the element to find the cofactor [i,j] : ";
cin>>a>>b;
cofactor(arr01,size,a,b);
*/
print_matrix(arr01,size,size);
return 0;
}
//definitions
void input_matrix(float** mat, int dim01, int dim02){
mat = new float*[dim01];
cout<<"Enter the matrix : "<<endl;
for(int i=0; i<dim01; i++){
mat[i]=new float[dim02];
for(int j=0; j<dim02; j++){
cin>>mat[i][j];
}
}
}
void print_matrix(float** mat, int dim01, int dim02){
for(int i=0; i<dim01; i++){
for(int j=0; j<dim02; j++){
cout<<mat[i][j]<<" ";
}
cout<<endl;
}
}
#包括
使用名称空间std;
//一些有用的函数
浮点**辅因子(浮点**,int,int,int);
无效输入矩阵(浮点**,int,int);
无效打印矩阵(浮点**,整数,整数);
//主要
int main(){
整数大小;
INTA,b;
浮动**arr01;浮动**arr02;
coutsize;
输入矩阵(arr01,大小,大小);
cout对于二维数组,您需要float**
但仍然需要创建数组
const int dim1=100;
const int dim2=100;
float **matrix = new float*[dim1];
for(int i=0;i<dim1;i++)
matrix[i] = new float[dim2];
//now you can add elements to your 2D array and print them once the elements
//have been added (print_matrix (print_matrix(matrix, dim1,dim2); )
//when done delete the array
for(int i=0;i<dim1;i++)
delete [] matrix[i];
delete [] matrix;
const int dim1=100;
常数int dim2=100;
浮动**矩阵=新浮动*[dim1];
对于(int i=0;i您现在显示的代码的问题是,默认情况下参数是按值传递的。这意味着该值被复制到函数的本地参数变量中。当您修改副本(例如通过赋值)时,只会更改副本,而不会更改原始副本
现在,如果我们看一下您的输入矩阵
函数及其声明:
void input_matrix(float** mat, int dim01, int dim02);
以及它的名称:
input_matrix(arr01,size,size);
我们可以清楚地看到这个问题。您对函数中的mat
所做的任何更改都只是该函数的局部更改
有两种解决方案:
要么根本不通过mat
,要么让函数返回“数组”:
或者通过引用传递参数mat
:
什么是mat
?如何调用这些函数?请创建一个数组来向我们展示。哦,数组数组不等于指向指针的指针。请参阅,例如,了解原因的简短解释。mat指向任何内存吗?请查看与您的问题无关的更新问题,但请注意,在新代码中,您显示的arr02
不是一个“数组”或一个指针,它只是一个简单的单float
变量。dim01和dim02是一个变量。我不想消耗额外的内存。您正在将一个未初始化的数组传递给输入矩阵(在被调用方中无法更改原始指针)。您应该在main
中创建数组,并将input_矩阵更改为input_矩阵(int dim01,int dim2);这样input_矩阵就可以填充数组,或者让input_矩阵创建并返回数组float**input_矩阵(int dim01,int dim02){…return matrix;}
input_matrix(arr01,size,size);
float** input_matrix(int dim01, int dim02);
void input_matrix(float**& mat, int dim01, int dim02);