您最多只能将15个不同的负载从一个端口运输到另一个端口。运送这些货物的货船的载重量为50吨。枚举载荷,有关每个载荷重量的信息作为输入。
假设每个负载的重量小于或等于50吨且大于0。
您将在一行中从输入中读取每个负载的重量。您的输入将以-1结尾。您将打印必要的旅行次数。
样本输入:
50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 -1
输出:
15
但是出现此错误,并且每当我向程序提供输入时
./vpl_execution: line 5: 15093 Bus error (core dumped) ./main
通过我对这种情况的了解,我认为我并没有超出数组索引或使用了错误的指针。另外,我在这里看到了具有解决方案的相同问题,但我想知道为什么代码无法正常工作,然后自己解决问题。非常感谢您的帮助。
#include <stdio.h>
int main()
{ int w,i,t,sum,index;
int list[16];
w = 1;
do
{
scanf("%d",&w);
list[index] = w;
index++;
}while(w >= 0);
t = 0;
for(i = 0;i < ((sizeof(list)/sizeof(list[0]))+1);i++)
{
sum =0;
if(sum <= 50)
{sum += list[i];}
else
{t++;}
}
printf("%d",t);
return 0;
}
第一个分段错误发生在此行:
list[index] = w;
您认为index
的值是什么?
您未使用值进行初始化,该值可能应该为0
。
因此,访问列表[index]相对于list
是未定义的行为,超出范围。就您而言,它导致了分段错误。
然后在for(i = 0;i < ((sizeof(list)/sizeof(list[0]))+1);i++)
内
此处访问list[i]
可能会在i的最后一个值处引起另一个段错误。您应该从+1
]中删除((sizeof(list)/sizeof(list[0]))+1)
解决方案:
将int w,i,t,sum,index;
更改为int w,i,t,sum,index = 0;
从+1
中删除((sizeof(list)/sizeof(list[0]))+1)
Aside:
这只是删除了段错误,逻辑错误可能仍然保留在您的代码中。
首先,您使用了未初始化的变量index
,请使用index=0
。