C++ 在float之后传递int作为参数会导致错误
在for循环之后,col值自动更改为1048576000为什么是这样?对此我没有任何线索。正因为如此,最后一步中的索引值超出了界限。代码是C++ 在float之后传递int作为参数会导致错误,c++,C++,在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;
#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;
}
#包括
使用名称空间std;
空白填充(浮动k、整行、整列)
{
浮法玻璃[row*(row+1)/2]={0.0};
int指数=0;
玻璃[指数]=k;
对于(inti=1;i1.0)?(k-1.0):0.0;
玻璃[指数+i]+=k/2.0;
玻璃[指数+i+1]+=k/2.0;
索引++;
}
}
coutj;
填充物(k,i,j);
}
返回0;
}
请帮帮我。我真的不知道你在找什么。首先,您正在处理的数组是一维的,这意味着始终只有一行 其次,创建阵列时:
float glass[row*(row+1)/2]={0.0};
其最大尺寸为尺寸<代码>第x行(第+1行)/2行)− 1,但在函数末尾,您使用了以下公式:
index = row * (row - 1) / 2 + col - 1;
如果列
的值大于行
,该怎么办?这意味着代码行:
cout<<glass[index]<<endl;
<代码> CUD>代码>浮法玻璃[行*(行+ 1)/2 ] < /C>不是有效代码,您似乎无法访问该数组,导致不明确的行为。首先,请阅读,您应该知道C++没有,但一些编译器将它作为语言的扩展。它不是便携的,或者你应该依赖于无处不在的东西。改用。最后,您确定永远不会超出数组的边界吗?它的可能重复可能是一个有用的数学练习,可以确定
index+i+1
的最大值。对于row和col都是1,在某一点上它将是2,并且在glass
For(int i=1;i在该点col已经更改之前)中只需要一个元素。更可能的罪魁祸首是'glass[index+i+1]+=k/2.0;`在此之前。没有任何变量都是下界的,但值col会自动越界。只有当我以float,int,int形式传递参数时,才会给出写入答案。