在for循环之后,col值自动变为1048576000为什么我对此没有任何线索。因此,最终步骤中的索引值超出了界限。代码是
#include<bits/stdc++.h>
using namespace std;
void fill(float k,int row,int col)
{
float glass[row*(row+1)/2]={0.0};
int index=0;
glass[index]=k;
for(int i=1;i<=row;i++)
{
for(int j=1;j<=i;j++)
{
k=glass[index];
glass[index]=(k>=1.0)?1.0:k;
k=(k>1.0)?(k-1.0):0.0;
glass[index+i]+=k/2.0;
glass[index+i+1]+=k/2.0;
index++;
}
}
cout<<col<<endl;
index=row*(row-1)/2 +col -1;
cout<<glass[index]<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
{
float k;
int i,j;
cin>>k>>i>>j;
fill(k,i,j);
}
return 0;
}
请帮帮我。
答案 0 :(得分:0)
我真的不知道你在找什么。首先,您正在处理的数组是一维的,这意味着总有一行。
其次,在创建数组时:
float glass[row*(row+1)/2]={0.0};
其最大尺寸为尺寸row x (row + 1) / 2) − 1
,但在功能结束时您使用了公式:
index = row * (row - 1) / 2 + col - 1;
如果col
的值大于row
怎么办?这意味着带代码的行:
cout<<glass[index]<<endl;
正在尝试访问超出glass
数组大小的值,结果为segmentation fault
。