对于一个学校项目,我们必须编写一个需要使用内存分配的程序。
我使用 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/