```cpp
while(u<=m)
{
r++;
u=u+a[r];
}
```
这个循环里面r有可能大于n,然后a[r]就等于0了,然后u<=m变成死循环,r一直加就爆内存了
改成
```cpp
while(r<=n&&u<=m)
{
r++;
u=u+a[r];
}
```
即可
by YZL11111 @ 2020-02-27 00:41:56
@[Shadowlove](/user/303613)
by YZL11111 @ 2020-02-27 00:42:07
```cpp
int n,m,sum=0,l=1,r=1,u;
```
放在外面的话假设你r到了1000005,内存溢出但是由于在堆上的空间地址是连续的,所以a[1000005] = n,那么u = u + u[r] > m所以会跳出循环,答案就正确了
@[Shadowlove](/user/303613)
by YZL11111 @ 2020-02-27 00:45:19
@[YZL11111](/user/226316) 哦哦 明白 谢谢大佬
by Shadowlove @ 2020-02-27 13:03:07