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

标签 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");
}

它没有打印出矩阵,我不明白问题出在哪里。感谢任何提示。

最佳答案

首先,不太清楚你想问什么。我假设您想要创建一个大小为 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/

相关文章:

C、两次调用函数,一次写入文件,一次写入终端

c - 第 N 个元素的数组,尝试从左到右和从右到左添加元素

c - 如何在我自己的shell中实现kill命令

c - 声明: "node"?中第一个 "typedef struct node { - - - } Node;"的用途是什么

c - C 函数中未声明的标识符

c++ - 带有 -isysroot 的 gcc 创建包含以等号 "="开头的包含路径并且编译失败

c - POSIX system(3) 对异步 shell 命令的调用会立即返回吗?

c - 分配指向结构的指针,但不是实际的结构

比较符号常量、枚举、常变量

c++ - std::strftime 的返回值