Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ malloc.c:2451,在使用std::vector的程序中_C++_Vector_Matrix_Crash_Malloc - Fatal编程技术网

C++ malloc.c:2451,在使用std::vector的程序中

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){ (...)

在试图实现一种算法来寻找矩阵的特征值时,我遇到了一个问题:程序必须在连续迭代中建立两个辅助矩阵。(在我的程序中称为t_-mat和s_-mat)。为了实现这一点,我决定使用std::vector的std::vector,它的长度应该相等。 然后,我尝试做的是在每一步:

1) 将所有向量增加一行,值为0.0

2) 在末尾添加一个新向量,所有元素为0.0

代码如下所示:

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);