c++ - 无法解释以下 C++ 片段的输出

标签 c++ multidimensional-array output memset

#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]。因此,当您尝试使用 i19 执行 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/

相关文章:

python - 将二维列表中的第一次出现添加到另一个列表 (Python 3.4.2)

c++ - 修改具有 hashed_non_unique 键的 Boost Multi-Index Map 中的键范围

arrays - 从多维数组中删除 Nothing 值

c++ - 我坚持创建输出成员函数

c# - 如何制作 PInvoke 友好的 native API?

c# - 结构中的结构

c++ - 应用程序完成时未处理的异常

c++ - 错误 : lvalue required as left operand of assignment c++

c# - 为什么 Process.Start 会产生 ANSI 转义码

javascript - Closure JavaScript(简单)计数器的不同输出