在2D矩阵中使用malloc和realloc时出现问题

时间:2015-10-31 19:40:15

标签: c

我想仅使用mallocrealloc输出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");
}

它没有打印出矩阵,我也看不出问题所在。感谢任何提示。

2 个答案:

答案 0 :(得分:1)

首先,它不清楚你在问什么。我假设您要创建一个大小为s的方阵,然后打印它。

您的代码中存在多个错误。首先,摆脱那个realloc:即使你可以使用它来分配内存,它也可以在内存已经分配后重新分配内存。

然后,您分配了错误的内存量。在第一次分配时,您希望分配sint*次。在第二次分配时,您希望在矩阵的每一行中分配sint的大小。

这意味着您需要通过以下方式替换所有分配部分:

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++;
    }