微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C++ 中动态创建二维数组时出现问题这是代码它不适用于某些特定条件

如何解决在 C++ 中动态创建二维数组时出现问题这是代码它不适用于某些特定条件

在我下面的代码中,我从用户获取输入(int)行和列并创建一个二维数组。接受输入后,我正在打印相同的二维数组。

#include<iostream>
using namespace std;
int main()
{
    int rows,cols;
    cin>>rows>>cols;
    int **matrix=new int*[cols];
    for(int j=0;j<cols;j++)
    {
        matrix[j]=new int[rows] ;
    }
    for(int j=0;j<rows;j++)
    {
        for(int k=0;k<cols;k++)
        {
            cin>>matrix[j][k];
        }
    }
    for(int j=0;j<rows;j++)
    {
        for(int k=0;k<cols;k++)
        {
            cout<<matrix[j][k]<<" ";
        }
        cout<<endl;
    }
}

以上代码在两种情况下都能完美运行:

1st. when input rows and cols are equal.
2nd. when cols>rows.

It dosent work for the case in which rows>cols. 如果你不相信我,运行它并检查。我不知道我哪里出错了。编译器也没有给出任何错误。请帮忙!!

解决方法

您错误地使用了 rowscols。在需要行的地方,有时会使用 cols,反之亦然。完整更正代码:

Try it online!

#include<iostream>
using namespace std;
int main()
{
    int rows,cols;
    cin>>rows>>cols;
    int **matrix=new int*[rows];
    for(int j=0;j<rows;j++)
    {
        matrix[j]=new int[cols] ;
    }
    for(int j=0;j<rows;j++)
    {
        for(int k=0;k<cols;k++)
        {
            cin>>matrix[j][k];
        }
    }
    for(int j=0;j<rows;j++)
    {
        for(int k=0;k<cols;k++)
        {
            cout<<matrix[j][k]<<" ";
        }
        cout<<endl;
    }
}

输入:

3 2

1 2
3 4
5 6

输出:

1 2 
3 4 
5 6 
,

您忘记确定第一个下标是指行还是列,然后您在代码中途改变了主意。如果它是一个行主数组,那么你分配它是错误的;如果它是列主要的,那么你就填错了。

,

您先按 cols 分配,然后按 rows 分配。这意味着您的矩阵是“列专业”。但是在第二个和第三个循环中,您使用 row j 作为主索引,然后使用 column k 作为辅助索引。如果 rows != cols,您最终将离开数组之一的末尾,调用未定义行为。

因为您的矩阵是列主要的,所以您必须首先按列号索引,然后按行号索引。例如:

for(int j=0;j<cols;j++)
{
    for(int k=0;k<rows;k++)
    {
        cin>>matrix[j][k];
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。