我这里有一个代码段,它将零加载到表示位矩阵的向量中。当程序运行并尝试将结果写入输出文件时,我得到一个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]
有人能看出为什么会这样吗?
答案 0 :(得分:0)
在第二个for循环中的函数Write()
中,您正在递增count
而不是count2
:
for( count2 = 0; count2 < M[count].size(); count++ <= should be count2
然后下一行调用分段错误,因为您正在访问矩阵中超出范围的值。