Загрузка вектора с битовой матрицей

#c #matrix #vector

#c #матрица #вектор

Вопрос:

Здесь у меня есть сегмент кода, который загружает нули в вектор, представляющий битовую матрицу. Когда программа запускается и пытается записать результат в выходной файл, я получаю ошибку 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 zeron" );  // 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:

В вашей функции Write() во втором цикле for вы увеличиваете count вместо count2 :

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

Затем следующая строка вызывает ошибку сегментации, поскольку вы обращаетесь к значению в матрице, которое выходит за рамки.

Комментарии:

1. Спасибо. Я всегда пропускаю что-то подобное.