【发布时间】:2015-03-24 09:38:03
【问题描述】:
我正在为学校做一个项目,下面说明了我想要实现的一个更简单的总体概念。
基本上我想做的是以下几点: - 向用户询问一个号码(检查!) - 创建一个存储这些数字的动态数组(检查!) - 它将继续存储数字,直到输入终止值 -999(检查!)
我的问题是: - 教授说我可能不会假设数组有一定的大小; - 但是,他确实给出了数组大小的起点,在我的例子中是 5,然后随着更多数字的输入,它将扩展数组(大小加倍)。
-看下面的代码,当用户输入6个数字进行输入时,动态数组会分配更多的内存来补偿更多整数的空间。这部分工作正常。
-但是,当用户输入 10 个数字时。我希望动态数组的大小再次扩大并翻倍。但是使用与上述相同的方法,这一次它的大小无法翻倍,并且在编译时在 linux 中出现错误,提示“realloc(): invalid next size: 0x000000000221f0”
基本上,我要实现的是一个起始大小为 5 的动态数组,并根据需要为更多整数分配更多大小。 例如: 动态数组有 5 个整数的空间,用户输入 5 个整数。 数组将空间扩展为 10 个整数,用户输入 10 个整数,数组的大小再次翻倍为 20 个整数,依此类推.....
如果有人可以推荐一种方法,或者指出我的错误,我将非常感激。
我在过去的 2 个小时里在这里和谷歌上搜索可能的修复,并了解 malloc 和 realloc 的功能,但迄今为止未能解决。
int count=0;
int size=5;
int *to=(int *)malloc(size*sizeof(int));
printf("Enter\n");
scanf("%d",&to[count]);
while(to[count]!=(-999))
{
count++;
scanf("%d",&to[count]);
if(count==5)
{
printf("Expanding size . . . . . .\n");
to=(int*)realloc(to,size*sizeof(int));
}
if(count==10)
{
printf("Expanding size to 10. . . . .\n");
to=(int*)realloc(to,(2*size)*sizeof(int));
}
}
【问题讨论】:
-
您无需转换
malloc或(就此而言)realloc的返回值。 -
scanf("%d",&to[count]); if(count==5): 0) 已经在区域外使用。 1)size尚未更新。size的to也没有增加。 -
我已经考虑到您所说的并更新了我的代码。你说的很有道理。我不再收到错误消息。 !! :)
标签: c arrays dynamic heap-memory realloc