#include <bits/stdc++.h>
using namespace std;
int main() {
int dp[5][6];
memset(dp,0,sizeof(dp));
dp[1][0]=0;
for(int i=1;i<=9;i++){
dp[1][i]=1;
}
cout<<dp[2][0]<<endl;
cout<<dp[3][0]<<endl;
}
上面的代码片段产生了意外的输出:
1
0
然而,当我将 dp 数组大小更改为 dp[100][100] 时, 我得到预期的输出:
0
0
我也尝试打印 2D 矩阵大小:
sizeof(dp)/sizeof(int)
我得到正确的值:对于 dp[5][6] 为 30,对于 dp[100][100] 为 10000。 我在 linux 中使用标准的 g++ 编译器编译并执行了代码。 有人可以向我解释这个错误输出的原因吗。
最佳答案
数组的维度是[5][6]
。因此,当您尝试使用 i
从 1
到 9
执行 dp[1][i] = 1
时,在一些迭代,dp[1][6] = 1
完成了。由于“行”中的元素数量为 6
,它执行与 dp[2][0] = 1
相同的操作,因为该二维数组的所有元素都是顺序存储。
所以基本上,当您尝试访问 dp[1][i]
时,就像是 startOffset + 1 * rowSize + i
。并且 i
大于行大小。
关于c++ - 无法解释以下 C++ 片段的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51301800/