#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. Спасибо. Я всегда пропускаю что-то подобное.