我想仅使用 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");
}
它没有打印出矩阵,我不明白问题出在哪里。感谢任何提示。
最佳答案
首先,不太清楚你想问什么。我假设您想要创建一个大小为 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++;
}
关于c - 在 2D 矩阵中使用 malloc 和 realloc 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33455816/