C++ malloc.c:2451,在使用std::vector的程序中
在试图实现一种算法来寻找矩阵的特征值时,我遇到了一个问题:程序必须在连续迭代中建立两个辅助矩阵。(在我的程序中称为t_-mat和s_-mat)。为了实现这一点,我决定使用std::vector的std::vector,它的长度应该相等。 然后,我尝试做的是在每一步: 1) 将所有向量增加一行,值为0.0 2) 在末尾添加一个新向量,所有元素为0.0 代码如下所示:C++ malloc.c:2451,在使用std::vector的程序中,c++,vector,matrix,crash,malloc,C++,Vector,Matrix,Crash,Malloc,在试图实现一种算法来寻找矩阵的特征值时,我遇到了一个问题:程序必须在连续迭代中建立两个辅助矩阵。(在我的程序中称为t_-mat和s_-mat)。为了实现这一点,我决定使用std::vector的std::vector,它的长度应该相等。 然后,我尝试做的是在每一步: 1) 将所有向量增加一行,值为0.0 2) 在末尾添加一个新向量,所有元素为0.0 代码如下所示: unsigned j_=0; while (conv_measure > 0.001){ (...)
unsigned j_=0;
while (conv_measure > 0.001){
(...)
std::cout << "Step 5" << std::endl;
unsigned temp_mat_size= t_mat.size();
std::cout << "CP 1" << std::endl;
std::cout << "temp mat size " << temp_mat_size << std::endl;
for (size_t l_=0; l_ < temp_mat_size; l_++)
{
t_mat[l_].push_back(0.0); //Enlarge each vector by one row.
s_mat[l_].push_back(0.0);
}
std::cout << "CP 2" << std::endl;
vec_cont_t next_vec (temp_mat_size+1, 0.0); //matrix_size +1 entries with value 0.0
std::cout << "CP 3" << std::endl;
t_mat.push_back(next_vec);
s_mat.push_back(next_vec);
(...)
}
遗憾的是,我仍然是C++初学者,特别是调试。我不明白这条消息想告诉我什么,也不明白程序为什么会崩溃。我不明白为什么它工作了3次,然后突然下降。4x4双工矩阵的空间要求不足以占用所有可用内存。我在别处读到,我应该使用Valgrind来解决这个问题,但这超出了我的能力。没有足够的代码来确定问题可能是什么。但是,以下说法值得怀疑:
s_mat[l_].push_back(0.0);
循环假定s_mat与t_mat的大小相同。如果s_-mat比t_-mat小,那么这将导致未定义的行为
s_mat[l_].push_back(0.0);