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



对于一个学校项目,我们必须制作一个需要使用内存分配的特定程序。我使用int *** array,但是当我为它声明要使用的内存时,我无法使它正常工作。我想这是因为在某个时刻,我调用了尚未分配的内存,尽管我找不到哪里。数组始终为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

阵列总是3*大小*未知大小的

首先,您最初使用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 ----------nn",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;
}

如果只有最后一个维度是未知的,那么您可以编写更简单的代码:

#define lengthof(array) ( sizeof(array) / sizeof ((array)[0]) )
int *arr[3][size];

然后将它们全部设置为已知状态:

for (size_t i = 0; i != lengthof(arr); ++i)
    for (size_t j = 0; j != lengthof(arr[i]); ++j)
         arr[i][j] = 0;

然后更改大小:

for (size_t i = 0; i != lengthof(arr); ++i)
    for (size_t j = 0; j != lengthof(arr[i]); ++j)
    {
        void *temp = realloc(arr[i][j], unknown_size * sizeof *arr[i][j])) )
        if ( !temp )
             exit(EXIT_FAILURE);  // or other error handling
        arr[i][j] = temp;
    }

注:。如果将此分配代码放入函数中,请小心。

在我看来,您的代码是C++:

int main()
{
    int a, b, c;
    int*** arr = new int**[a];
    for (int i = 0;i < a;i++)
    {
        arr[i] = new int*[b];
        for (int j = 0;j < b;j++)
        {
            arr[i][j] = new int[c];
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新