用位矩阵加载向量

时间:2016-10-11 04:12:07

标签: c++ matrix vector

我这里有一个代码段,它将零加载到表示位矩阵的向量中。当程序运行并尝试将结果写入输出文件时,我得到一个seg错误。如果程序没有在输出文件中写入,程序运行正常。

[code]
Bitmatrix::Bitmatrix(int rows, int cols)
{
    int count = 0;                                                                          // count variable
    int count2 = 0;                                                                        // 2nd count variable

    if( rows <= 0 || cols <= 0 )
    {
        fprintf( stderr, "Value of rows or columns is less than or equal to zero\n" );  // print error message
        M.resize( 1 );                                                                 // resize to 1 x 1 matrix
        M[0] = '0';                                                                   // set 0 as the value
    }
    else
        M.resize( rows );                                                           // resize matrix to number of rows
        for( count = 0; count < M.size(); count++ )
        {
            for( count2 = 0; count2 < cols; count2++ )
            {
                M[count].push_back( '0' );                                       // fill matrix with zeros  
            }
        }
}[/code]

在输出文件中打印的功能是:

[code]void Bitmatrix::Write(string fn)
{
    ofstream out;                                                      // output stream object
    int count = 0;                                                    // count variable
    int count2 = 0;                                                  // 2nd count variable

    out.open( fn.c_str() );                                        // open output file
    for( count = 0; count < M.size(); count++ )
    {
        for( count2 = 0; count2 < M[count].size(); count++ )
        {
            out << M[count][count2];
        }
        out << endl;
    }
}[/code]

有人能看出为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

在第二个for循环中的函数Write()中,您正在递增count而不是count2

for( count2 = 0; count2 < M[count].size(); count++ <= should be count2

然后下一行调用分段错误,因为您正在访问矩阵中超出范围的值。