我无法理解为什么循环变得无限。查看了gdb,看到i = 8
的{{1}}值再次变为i
但是不清楚为什么会更改。
i = 4
答案 0 :(得分:0)
下面
if(v[j] <= i && min[i - v[j]] < min[i])
{
min[i] = min[i-v[j]];
}
您正在写信min[i]
。您的i
最多可以更改为w-1
。 w
为11,因此i
最多可以更改为10.但您的min
数组大小为size
,等于3。
因此,当您从min
边界设置元素时,您正在擦除堆栈数据。可能在某些时刻,您还使用新值4擦除局部变量i
(也存储在堆栈中)。
更新:
您可以更改
int min[size];
到
int min[size > w ? size : w];
检查。