【发布时间】:2014-12-05 18:30:52
【问题描述】:
我定义了一个函数,用于通过指针初始化一个二维数组,同时用随机值对其进行初始化。
然后我打印它,我没有看到预期值。我的代码中的错误在哪里?我已经找了好几个小时了。
#define MATRIX_SIZE 3
int **initialize_matrix(size_t m, size_t n){
int i1,i2;
int **ptr1=(int **)malloc(sizeof(int *)*m*n);
int *ptr2=(int *)malloc(sizeof(int)*m);
srand(time(0));
for(i1=0;i1<MATRIX_SIZE;i1++){
for(i2=0;i2<MATRIX_SIZE;i2++){
ptr2[i2]=rand()%10;
printf("%d ",ptr2[i2]);
}
}
for(i1=0;i1<MATRIX_SIZE;i1++){
ptr1[i1]=ptr2+m*i1;
}
printf("\nFinished generating\n");
return ptr1;
}
void print_matrix(int** matrix_to_print){
int i1,i2;
for(i1=0;i1<MATRIX_SIZE;i1++)
for(i2=0;i2<MATRIX_SIZE;i2++){
printf("%d ",matrix_to_print[i1][i2]);
if(i2==MATRIX_SIZE-1)
printf("\n");
}
}
打印出来:
2 4 8
0 6 7
6 4 4
完成生成
矩阵 1:
6 4 4
135113 0 0
0 0 0
【问题讨论】:
-
int **ptr1=(int **)malloc(sizeof(int *)*m*n);int *ptr2=(int *)malloc(sizeof(int)*m);:应该是int **ptr1=(int **)malloc(sizeof(int *)*n);int *ptr2=(int *)malloc(sizeof(int)*m*n);。为什么MATRIX_SIZE在函数initialize_matrix(size_t m, size_t n)中使用?
标签: c arrays pointers memory-management