【问题标题】:When 2D array is read by program pointer to array outputs incorrect values, but vector outputs correct values当程序指针读取二维数组时指向数组输出不正确的值,但向量输出正确的值
【发布时间】:2021-04-11 02:04:14
【问题描述】:

我正在做作业,我的程序需要从文件中读取二维数组。我必须使用指向数组的指针,这就是作业的重点。出于测试目的,我还包括了矢量。当矩阵输出到数组时,输出不正确的值,但向量输出正确的值。在更大的数组(100 x 50)上测试时,指向数组的指针在不正确的值中也输出了很好的值。但由于它的大小,我不在这里包括它。我究竟做错了什么? 这是输入的部分代码:

 Matrix (std::istream &is)
    {
        is >> n_ >> m_;
        int counter = 0;
        int matrix_temp[n_ * m_];
        while(counter < (n_ * m_))
        {
            int x = 0;
            is >> x;
            matrix_temp[counter] = x;
            vector_test.push_back(x); 
            counter ++;
        }
        mat_ = matrix_temp;
    }

这里是类变量:

private:
    int n_;//wiersze
    int m_;//kolumny
    int *mat_;
    std::vector<int> wektor;

这里是输出部分代码:

friend std::ostream &operator<< (std::ostream &os, const Matrix &m)
    {
        int counter = 0;
        int size = m.n_ * m.m_;
        for(int i = 0; i<size; i++)
        {
            os << counter <<"\t "<<*(m.mat_ + counter) <<"\t"<<m.vector_test[i]<<std::endl;
            counter ++;
        }
        return os;
    }

主要:

int main()
{
Matrix matrix = Matrix(std::cin);
std::cout << matrix;
}

输入文件(第一行是大小:行和列):

5   3
3   3   3
3   3   3
3   3   3
3   3   3
3   3   3

输出:

【问题讨论】:

  • 您认为int matrix_temp[n_ * m_]; 存储在哪里,int *mat_; 指向哪里?

标签: c++ arrays file pointers vector


【解决方案1】:

好的,我已经使用 malloc 解决了它。这是代码的工作部分:

  Matrix (std::istream &is)
    {
        is >> n_ >> m_;
        int counter = 0;
        mat_ = (int*)malloc((n_* m_)*sizeof(int));
        while(counter < (n_ * m_))
        {
            int x = 0;
            is >> x;
            mat_[counter] = x;
            vector_test.push_back(x); 
            counter ++;
        }
        
    }

希望它能帮助其他被大学折磨的灵魂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多