为什么我的数组值会更新为随机值?
Why did my array values get updated to random values?
我有一个 2 行 3 列的网格。我做了一个操作,我不更新网格的任何元素,而只是访问它。不知何故,我的网格已更新为随机值
#include <iostream>
using namespace std;
int main(){
int grid[2][3]{{1,3,5},
{2,4,-10}};
int row{sizeof(sizeof(grid)/sizeof(grid[0]))};
int col{sizeof(grid[0])/sizeof(int)};
int dp[3][4]{};
for(auto &y:grid){
for(auto x:y){
cout<<x<<"\t";
}
cout<<endl;
}
for(int i{1};i<=row;i++){
for(int j{1};j<=col;j++){
dp[i][j]=grid[i-1][j-1]+max(dp[i][j-1],dp[i-1][j]);
}
}
cout<<"++++++++++++++++++++++++"<<endl;
for(auto &y:grid){
for(auto x:y){
cout<<x<<"\t";
}
cout<<endl;
}
}
输出:
1 3 5
2 4 -10
++++++++++++++++++++++++
1 4 8
7 4 3
当我 运行 网上的这段代码 IDE 喜欢 cpp.sh 我没有遇到问题。但我正在使用 devC++,也许这是 devC++ 的一些特定问题,而不是我的代码。
您的 row
计算不正确:
int row{sizeof(sizeof(grid)/sizeof(grid[0]))};
这给出了 8
的值(在我的机器上,但通常它给出了 int
的大小)。你有一个额外的 sizeof
在那里。这意味着您通过越界索引在第二个循环中调用未定义的行为。
改为:
int row{sizeof(grid)/sizeof(grid[0])};
根据需要给出 2
。
这里是 demo。
我有一个 2 行 3 列的网格。我做了一个操作,我不更新网格的任何元素,而只是访问它。不知何故,我的网格已更新为随机值
#include <iostream>
using namespace std;
int main(){
int grid[2][3]{{1,3,5},
{2,4,-10}};
int row{sizeof(sizeof(grid)/sizeof(grid[0]))};
int col{sizeof(grid[0])/sizeof(int)};
int dp[3][4]{};
for(auto &y:grid){
for(auto x:y){
cout<<x<<"\t";
}
cout<<endl;
}
for(int i{1};i<=row;i++){
for(int j{1};j<=col;j++){
dp[i][j]=grid[i-1][j-1]+max(dp[i][j-1],dp[i-1][j]);
}
}
cout<<"++++++++++++++++++++++++"<<endl;
for(auto &y:grid){
for(auto x:y){
cout<<x<<"\t";
}
cout<<endl;
}
}
输出:
1 3 5
2 4 -10
++++++++++++++++++++++++
1 4 8
7 4 3
当我 运行 网上的这段代码 IDE 喜欢 cpp.sh 我没有遇到问题。但我正在使用 devC++,也许这是 devC++ 的一些特定问题,而不是我的代码。
您的 row
计算不正确:
int row{sizeof(sizeof(grid)/sizeof(grid[0]))};
这给出了 8
的值(在我的机器上,但通常它给出了 int
的大小)。你有一个额外的 sizeof
在那里。这意味着您通过越界索引在第二个循环中调用未定义的行为。
改为:
int row{sizeof(grid)/sizeof(grid[0])};
根据需要给出 2
。
这里是 demo。