C ++代码中的值更改

values change in c++ code

以下代码将 n 和 K 的值设置为零为什么会发生这种情况?

#include <iostream>
#include <stdio.h>

using namespace std; 

int main()
{   int n,K;
    cin>>n>>K;
    cout<<n<<" "<<K<<endl;
    int arr[n];
    int ranged = (1<<n);
    int dp[K][ranged];
    for(int i=0;i<n;i++)
    {   for(int j=0;j<ranged;j++)
            dp[i][j]=0;
    }
    cout<<n<<" "<<K<<endl;
} 

用于输入 5 3 输出: 5 3 0 0

您的代码没有将 n 和 K 的值设置为零,您只是将二维数组 dp 设置为 0for循环。而且你创造

int dp[K][ranged];

但是在 for 循环中,您检查了 for(int i=0;i<n;i++) 并分配了 dp[i][j]=0; 可以缓冲区溢出。

for(int i=0;i<n;i++)改为for(int i=0;i<K;i++)

您很可能会得到 Segmentation Fault段错误是一种特定类型的错误,由访问“不属于你”的内存引起。

您的外部 for 循环从 1n,但是您在二维数组中声明的行数是 K。所以只要 n<=K 你的代码应该 运行 没问题但是如果你给 n>k ( as 5>3 ) 那么你应该得到一个分段错误(或您得到的未定义行为!)。

要么改变

for(int i=0;i<n;i++)for(int i=0;i<K;i++)

int dp[K][ranged];int dp[n][ranged];