如何解决堆块在 ... 修改于 ... 过去请求的大小为 4
编辑:原来问题是在 15.line,我应该在括号内写上 counter-1。
我应该注意到即将到来的是一个额外的问题,我被问到一份新的研究生级别的工作,所以请只指出我在哪里犯了错误。
你好,我正在尝试用这个算法编写一个简单的 C 代码,
- 输入一个数字
- 从给定的列表中,尝试模仿数字
- 打印出使用过的数字以及给定和模拟数字之间的差异
- 还有一个关于输入的最小值和最大值的规则
所以我为给定的任务做了这个(它还没有完成,但我的目标现在不是在调试器中遇到问题);
#include<stdio.h>
#include<stdint.h>
#include <stdlib.h>
uint16_t AvailableValues[10] = {50,100,150,250,400,500,600,750,850,1000};
int* divider(int number)
{
int counter=1,i=9;
int* array;
array=(int*)malloc(counter*sizeof(int));
while (i)
{
while(number/AvailableValues[i]>0)
{
printf ("%d %d %d\n",number,counter,i);
array[counter]=AvailableValues[i];
number-=AvailableValues[i];
counter++;
array=realloc(array,counter*sizeof(int));
}
i--;
}
if (number)
{
array[counter]=number;
}
return array;
}
int main()
{
int number=0,total=0;
int* list;
printf ("Please enter a new target value:");
scanf ("%d",&number);
for (int i=0;i<10;i++)
{
total+=AvailableValues[i];
}
while (!(number>=AvailableValues[0] && number<=total))
{
printf ("Please enter a new target value:");
scanf ("%d",&number);
}
list=divider(number);
printf("Solution List");
printf("-------------");
for (int j=0;j<sizeof(list);j++)
{
printf("S[%d]:%d",j,list[j]);
}
return 0;
}
问题是,每当它第二次命中 realloc 时(我可以在控制台上得到一个 printf),它会返回“堆块在...修改...过去请求的大小为 4”。我还没有找到它的原因,而且我不擅长使用指针,所以我不能说问题是指针(int* 数组)还是其他任何问题。重新分配有什么问题,我该如何解决?
解决方法
array[counter]=AvailableValues[i];
在这一行中,您访问了所分配空间的最后一个元素之后的元素。
您需要:
array[counter - 1]=AvailableValues[i];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。