C语言 使用 malloc 创建多维数组时的奇怪行为



让我们从代码开始:

#include <stdio.h>
#include <stdlib.h>
int main (void) {
    int** matrix;
    int n = 5;
    int m = 5;
    matrix = (int**)malloc(n*sizeof(int*));
    for (int i = 0; i < n; i++) {
        matrix[i] = (int*)malloc(m*sizeof(int*));
    } 
    //This works:
    matrix[4][90] = 50;
    printf("%d", matrix[4][90]);
    //This produces an error:
        //matrix[5][90] = 50;
        //printf("%d", matrix[5][90]);
    return 0;
}

我一直在使用这种方法为 2d 数组动态分配内存(我也看到很多人使用它(,效果很好。但是,最近我注意到它似乎分配了比预期更多的内存,我不明白为什么。

在上面的示例中,我正在尝试创建一个 5x5 数组。它正好创建 5 行 (n(,如果您尝试访问这些行以外的任何行,则会出错。按预期工作。伟大!但是,它似乎正在创建大量列 (m(,而我只希望它创建 5 列。为什么会这样,我该如何解决?

同样的事情似乎也适用于卡洛克。

谢谢!

更改行:

matrix[i] = (int*)malloc(m*sizeof(int*));

自:

matrix[i] = (int*)malloc(m*sizeof(int));

由于matrix[i]属于 int * 类型,因此您为其分配的内存将包含 int

但是,当我

只希望它创建 5 个列时,它似乎正在创建大量列 (m(

不是。您通过尝试访问内存范围之外的元素来调用未定义的行为,因此您展示的第一个示例意外工作。代码每行只会创建 5 列。

相关内容

  • 没有找到相关文章

最新更新