Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中打印使用新方法制作的二维阵列+;_C++_Arrays - Fatal编程技术网

C++ 在C+中打印使用新方法制作的二维阵列+;

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

我正在尝试制作一个打印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而不是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);