【问题标题】:2D array elements not being read properly未正确读取二维数组元素
【发布时间】:2018-04-03 18:49:15
【问题描述】:

输出是一串整行/列的数字,而不是单个数字。有人可以帮我吗?

int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */  
int t;
cin>>t;
while(t--){
    int n,m,cnt=0;
    cin>>n>>m;
    for(int i=0;i<=n+1;i++){
        for(int j=0;j<=m+1;j++){
            if(i==0||i==n+1||j==m+1||j==0) G[i][j]=0;
            cin>>G[i][j];
        }
    }
 cout<<G[1][2]<<endl;//this gives wrong o/p

返回 0; }

【问题讨论】:

  • 代码语言是什么?
  • @STF 使用的编码语言是c++。
  • 我怀疑这段代码能否正常工作,缺少了关闭 while 循环的大括号。
  • 这只是我的代码中的一个 sn-p。

标签: c++ arrays loops io


【解决方案1】:

很可能由于for 循环中的i &lt;= n + 1j &lt;= m + 1 条件而导致读取越界,从而调用undefined behavior 导致堆栈损坏,从而解释了您所看到的输出。将边界修改为: i &lt; nj &lt; m。数组在 C++ 中是零索引的。第一个数组元素通过somearray[0] 访问,最后一个元素是somearray[n-1] 而不是somearray[n],这是您试图在代码中访问的内容。多维数组也是如此。声明:

cout << G[i][j] << endl; 

错误地放置在for 循环之外。它应该在内部 for 循环内。该数组应定义为 while 循环中的第二条语句:

int G[n][m]; // Avoid VLAs

也就是说可变长度数组不是 C++ 标准的一部分,与原始数组相比,您应该更喜欢 std::vectorstd::array

【讨论】:

  • 它是一个全局数组 A[101][101],我正在尝试在矩阵周围填充零。
【解决方案2】:

假设G 是一个大小为n x m 的二维数组,那么这里就超出了范围:

for(int i=0;i<=n+1;i++) {
    for(int j=0;j<=m+1;j++)

因为数组索引从 0 开始,到 size - 1 结束。

因此,您的代码会调用未定义行为。为避免这种情况,只需将您的双 for 循环更改为:

for(int i = 0; i < n; i++) {
    for(int j = 0;j < m; j++)

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多