我正在开发一个c ++项目来进行一些计算。我正在使用boost库来进行这些计算。我有一个奇怪的错误(结果不对或程序冻结)。当我检查发生了什么时,我意识到在创建了一个双打矩阵并将矩阵乘以0之后(确保所有内容都等于零,例如:
matrix<double> *A=new matrix<double>(10,100);
(*A)*=0.0;
我的矩阵并不总是被严格的0填充(这是一个被称为LOT的方法,指针被正确删除,我检查了我没有任何内存泄漏),有时是负零(-0.0)或甚至NaN !! 然后我意识到使用clear()方法会将所有值设置为默认值(对于double,它为0)。即使我确实有解决方案,这也很奇特! 像往常一样,问题是:我做错了什么(更有可能)或者库中是否有错误(不太可能)?
PS:我确实使用了intel编译器(2015版)
答案 0 :(得分:0)
如Boost Libraries中所述,
matrix (size_type size1, size_type size2): Allocates an uninitialized matrix that holds size1 rows of size2 elements.
所以你使用的矩阵没有初始化,导致那些奇怪的错误。 首先创建零矩阵或单位矩阵:
identity_matrix<double> matrix(3); //create a 3x3 identity matrix
zero_matrix<double> matrix(3, 3); //create a 3x3 zero matrix