【问题标题】:C Dynamic array that expands in size using realloc Error: Invalid next-sizeC使用realloc扩展大小的动态数组错误:无效的下一个大小
【发布时间】: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 尚未更新。 sizeto 也没有增加。
  • 我已经考虑到您所说的并更新了我的代码。你说的很有道理。我不再收到错误消息。 !! :)

标签: c arrays dynamic heap-memory realloc


【解决方案1】:

为什么不直接

if ((count%5) == 0)
{
    printf("Expanding size . . . . . .\n");
    to=realloc(to,count*2*sizeof(int));
}

检查realloc 中的内存分配错误留给读者作为练习。

【讨论】:

  • 展开 5 -> 10 -> 20(不是 15)
  • 非常感谢您提供帮助清理我的代码的建议。请问为什么在这种情况下我不必为 malloc 或recalloc 使用类型转换?什么时候打字是个好主意。谢谢
  • 我在这里找到了问题的答案。 stackoverflow.com/questions/605845/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2016-03-19
  • 2021-12-11
  • 2020-03-25
  • 2014-10-13
  • 2019-07-24
  • 2016-01-02
相关资源
最近更新 更多