【发布时间】:2019-11-13 01:39:04
【问题描述】:
我需要编写一个程序来为乘法表分配内存。问题是 malloc、calloc 和 realloc 的单个调用限制为 80 个字节,我不知道如何分阶段分配内存。 如果有人可以帮助我,我将不胜感激。
这是我已经尝试过的。如果我在一次调用中分配 400 个字节的内存,它就可以工作。
int main()
{
int row = 10;
int col = 10;
int w=0;
int k=0;
int *tab = (int *)malloc(row*col*sizeof(int));
if(tab == NULL)
{
printf("Failed to allocate memory");
return 8;
}
int i=0;
for (w=0; w<row; w++)
{
for(k=0; k<col; k++)
{
*(tab+w*col+k) = ++i;
}
}
for (w=0; w<row; w++){
for(k=0; k<col; k++){
printf("%3d ", *(tab+w*col+k) );
}
printf("\n");
}
free(tab);
return 0;
}
【问题讨论】:
-
为什么说“一次malloc、calloc、realloc的调用限制为80字节”呢?不允许您这样做真的是对作业/练习的限制吗?在这种情况下,有很多示例如何使用指向指针的指针(例如
int **tab在您的情况下)制作“动态多维数组”。 -
在普通系统上,
malloc等不应有一个小的限制(如 80 0r 400 字节),除非内存不足。当您尝试分配更多内存时究竟会发生什么?我建议将printf("Failed to allocate memory");替换为perror("malloc failed");或类似的,以显示相应的错误信息。请显示导致错误的值。你在什么系统上遇到问题?请edit您的问题添加缺失的信息。 -
如果分配 80 个字节,那么您将无法容纳 100 个 4 字节元素。你需要更好地描述你的问题。请阅读How to Ask
-
是的,我知道这很令人困惑。我会尝试更好地解释它。您可以在一次调用中使用 malloc、calloc 或 realloc 分配最多 80 个字节,但总体限制为 1000 个字节。您需要为多个 malloc、calloc 或 realloc 调用分配 480 个字节。
-
然后使用realloc 5次?
标签: c malloc matrix-multiplication dynamic-memory-allocation