为什么第一个循环用作无限循环?
这里z
总是一个正数。#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int t; /// t always a positive number
scanf("%d",&t);
int z=0;
while(z!=t) ///first loop
{
string s;
int r,n;
cin>>s>>r>>n;
int l=0,i,j,k=0;
while(s[l]!='\0')
l++;
for(i=0;i<r;i++)
{
l=l*2;
char a[l];
for(j=0;j<l/2;j++)
{
if(s[j]=='1')
{
a[k]='1';
a[k+1]='0';
}
else
{
a[k]='0';
a[k+1]='1';
}
k+=2;
}
int m=0;
while (a[m]!='\0')
{
s[m]=a[m];
m++;
}
}
cout<<s[n]<<endl;
z++;
}
return 0;
}
的值每次迭代都在增加,之后,它将等于t,循环将终止。但是在运行时,循环用作无限循环。
loss_weight
答案 0 :(得分:1)
我的猜测是,无限循环可能不是外部while(z!=t)
,而是内部
while (a[m]!='\0')
{
s[m]=a[m];
m++;
}
因为您检查了NUL字符,但从未将a[]
字符设置为\0
。
因此,您可能会有缓冲区溢出,最终会导致核心转储。