【问题标题】:Why did my array values get updated to random values?为什么我的数组值会更新为随机值?
【发布时间】:2020-09-04 01:20:41
【问题描述】:

我有一个 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  

当我在cpp.sh 等在线 IDE 上运行此代码时,我没有遇到问题。但我使用的是 devC++,也许这是 devC++ 的一些特定问题,而不是我的代码。

【问题讨论】:

  • 当我运行您的示例时,我看到两者的打印值相同。这是一个完整的例子吗?
  • 是的,这一切都在主函数中
  • @luxun 是的,你是对的。问题可能出在 devC++
  • 当我在 www.onlinegdb.com 上运行您的代码时,值保持不变,但我遇到了分段错误
  • @yaodav,我明白了。我计算错误的行数。我的坏

标签: c++ arrays dev-c++


【解决方案1】:

你对row的计算不正确:

int row{sizeof(sizeof(grid)/sizeof(grid[0]))};

这给出了8 的值(在我的机器上,但通常它给出了int 的大小)。你有一个额外的sizeof 在那里。这意味着您在第二个循环中通过越界索引来调用未定义的行为。

改为:

int row{sizeof(grid)/sizeof(grid[0])};

根据需要提供2

这是demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多