c - 如何分配和调整int***数组的内存大小?

标签 c arrays memory-management malloc realloc

对于一个学校项目,我们必须编写一个需要使用内存分配的程序。 我使用 int *** 数组,但是当我声明它使用的内存时,我无法让它正常运行。我想这是因为在某些时候我正在调用尚未分配的内存,尽管我找不到在哪里。 该数组始终为3*size*unknown size,其中未知值在程序运行时动态分配。

arr = (int***)realloc(arr, sizeof(int**) * 3);

for (int n = 0; n < 3; n++) {
    arr[n] = (int**)realloc(arr[n], sizeof(int*) * size);
}

for (int n = 1; n < 3; n++) {
    for (int x = 0; x < size; x++) {
        arr[n][x] = (int*)realloc(arr[n][x], sizeof(int));
        arr[n][x][0] = n - 1;
    }
}

感谢您的帮助。

最佳答案

如果您想更改内存大小,您需要先malloc,然后realloc

The array is always of 3*size*unknown size

首先,您最初使用malloc分配内存

int main (void)
{
    int val = 1;
    int LENGTH = 4;
    const int SIZE = 10;
    int ** arr[3];

    for(int i=0; i < 3; i++)
    {
        arr[i] = (int**)malloc(sizeof(int*)*SIZE);

        for (int j=0; j < SIZE; j++)
        {
            arr[i][j] = (int*)malloc(sizeof(int)*LENGTH);

            for (int k=0; k < LENGTH; k++)
            {
                arr[i][j][k] = val++;
            }
        }
    }

然后当你想使用realloc调整内存大小时

    val = 1;
    LENGTH = 8;

    for(int i=0; i < 3; i++)
    {
        for (int j=0; j < SIZE; j++)
        {
            arr[i][j] = (int*)malloc(arr[i][j], sizeof(int)*LENGTH);

            for (int k=0; k < LENGTH; k++)
            {
                arr[i][j][k] = val++;
            }
        }
    }

然后你可以通过打印数组中的值来测试它

    for(int i=0; i < 3; i++)
    {
        printf("---------- %d ----------\n", i);
        for (int j=0; j < SIZE; j++)
        {
            for (int k=0; k < LENGTH; k++)
            {
                printf("  %d", arr[i][j][k]);
            }
            printf("\n");
        }
        printf("---------- %d ----------\n\n",i);
    }

当你使用完数组后,你可以使用free释放内存

    for(int i=0; i < 3; i++)
    {
        for (int j=0; j < SIZE; j++)
        {
            free(arr[i][j]);
        }

        free(arr[i]);
    }

    return 0;
}

关于c - 如何分配和调整int***数组的内存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34252831/

相关文章:

JavaScript - 在拼接数组中的项目然后将该数组重新呈现到我的页面时遇到问题

java - 二维数组作为类变量

delphi - 在 Delphi 应用程序中获取 EOutOfMemory 之前的可用内存(地址空间)

使用 malloc 为结构体分配 C 内存

c++ - 消除 C++ 和 GNU 科学库代码中的内存泄漏

c - 对于大型和小型 btree,btree 中每个节点的键数平均相同吗?

连接 3 个字符串并返回指向新字符串 C 的指针

c - 使用 emscripten 从标准输入读取得到不存在的换行符

c - 如何优化此功能? (使用几乎所有的处理能力)

c - 将用户确定的坐标分配给嵌套数组