我想仅使用malloc
和realloc
输出2D矩阵。我不知道以下代码中出了什么问题:
int s = (int)sqrt(9);
int i,j,k;
int **M;
M = malloc(sizeof(int));
k = 0;
while(k<s) {
for(i=0;i<s;i++) {
M = realloc(M, sizeof(int));
M[k][i] = 5;
}
k++;
}
for(i=0;i<s;i++){
for(j=0;j<s;j++){
printf("%d \t",M[i][j]);
}
printf("\n");
}
它没有打印出矩阵,我也看不出问题所在。感谢任何提示。
答案 0 :(得分:1)
首先,它不清楚你在问什么。我假设您要创建一个大小为s
的方阵,然后打印它。
您的代码中存在多个错误。首先,摆脱那个realloc:即使你可以使用它来分配内存,它也可以在内存已经分配后重新分配内存。
然后,您分配了错误的内存量。在第一次分配时,您希望分配s
次int*
次。在第二次分配时,您希望在矩阵的每一行中分配s
次int
的大小。
这意味着您需要通过以下方式替换所有分配部分:
M = malloc(s * sizeof(int*));
k = 0;
while(k<s) {
M[k] = malloc(s * sizeof(int));
for(i=0;i<s;i++) {
M[k][i] = 5;
}
k++;
}
答案 1 :(得分:0)
int s = (int)sqrt(9);
int i,j,k;
int **M=NULL;
k = 0;
while(k<s){
M = realloc(M, (k+1)*sizeof(int *));
for(i=0;i<s;i++){
M[k] = realloc(M[k], (i+1)*sizeof(int));
M[k][i] = 5;
}
k++;
}