Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在float之后传递int作为参数会导致错误_C++ - Fatal编程技术网

C++ 在float之后传递int作为参数会导致错误

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;

在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;
}
#包括
使用名称空间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形式传递参数时,才会给出写入答案。