gpt4 book ai didi

c - 动态二维数组好像要分配更多的内存

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:47 25 4
gpt4 key购买 nike

我正在尝试使用以下代码在 C 中分配一个动态二维数组:

int **allocateMatrix(int rows, int columns) {

int i = 0;
int **p = NULL;

p = (int**) calloc(rows, sizeof(int*));
for(; i < rows; i++) {

p[i] = (int*) calloc(columns, sizeof(int));
}

return p;
}

代码有效,但实际上它分配了所需内存的两倍。

例如,如果我传递参数 rows = 2columns = 3,我会得到一个 2 行 8 列的数组。

我做错了什么吗?

谢谢。

编辑:

矩阵的内容(从文件加载)是:

-1 5 0
4 0 2

这是分配和分配值后内存的样子:

Memory

最佳答案

它正在分配正确数量的内存,但它分配的内存比简单的二维数组要多,因为您创建的不是简单的二维数组。

假设一个 32 位系统(所以 sizeof(int) == sizeof(int *),并且 sizeof(int) == 4),那么:

  • 一个简单的二维数组需要 2 x 3 个整数 = 6 x 4 = 24 个字节
  • 动态二维数组需要 2 个指针加上 2 x 3 个整数 = 8 x 4 = 32 个字节

那是在计算内存分配开销之前。所以不是两次,而是更多。

这样做的好处是您可以编写 p[i][j] 并获得正确的结果。如果你模拟一个简单的二维数组,你必须自己做下标计算:p[i*3+j] 或者使用 (*p)[i][j],具体取决于您如何定义指针 p

关于c - 动态二维数组好像要分配更多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19989522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com