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
设置为 0
在 for
循环。而且你创造
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
循环从 1
到 n
,但是您在二维数组中声明的行数是 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];
以下代码将 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
设置为 0
在 for
循环。而且你创造
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
循环从 1
到 n
,但是您在二维数组中声明的行数是 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];