在float之后传递int作为参数会产生错误

时间:2018-06-19 06:45:04

标签: 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;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;
}

请帮帮我。

1 个答案:

答案 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