我使用malloc()将多维变量数组传递给C中的函数时遇到问题

这段代码应该在main中创建一个数组然后打印它,但每次运行它时我只得到一个全0的数组

#include  #include  void print(float **A, int w, int h){ int i, j; A = (float*) malloc(w*h*sizeof(float)); for (i=0;i<h;i++){ A[i] = (float*) malloc(w*sizeof(float)); } for (i=0; i<h; i++){ for(j=0; j<w; j++){ printf("%f ", A[i][j]); } printf("\n"); } } int main(void) { int i; int x_dimension=3; int y_dimension=2; float arr [3][2]={}; arr[0][0]=16.2; print(arr,x_dimension,y_dimension); return 0; } 

你在printfunction中重新分配它,这应该工作:

 #include  #include  void print(float * A,int h, int w){ int i,j; for (i=0;i 

请注意,我还在printfunction中反转了wh参数。

我想你看到arr没有被初始化:

  1. 分配内存?
  2. 默认值。
  3. float arr [] []和float ** arr不一样,你应该这样使用: float (*A)[2]

但是在你的main函数中,你已经完成了alloc工作。 arr在堆栈中分配。 因此,在您的打印function中,您需要做的只是打印结果或初始化每个项目的值。

 #include  #include  void printArr(float (*A)[2],int w, int h){ int i,j; //Wrong, A has been alloced. /* A = (float*) malloc(w*h*sizeof(float)); for (i=0;i