2D 矢量中的 push_back() 在使用动态大小时出错

push_back() in a 2D vector faults when using a dynamic size

本文关键字:动态 出错 小时 push back 2D      更新时间:2023-10-16

我正在尝试一些简单的事情。

std::vector<std::vector<int> > computeBuf;
std::vector<int> temp;
computeBuf.push_back(temp);                        // correct
computeBuf.push_back(std::vector<int> (10) );      // correct  
int size = 10;
computeBuf.push_back(std::vector<int> (size) );    // correct
int dynsize = someClass.getValue();
computeBuf.push_back(std::vector<int> (dynsize) ); // fault !!!!!
导致

程序崩溃的变量"dynSize"是什么?编译器似乎需要知道变量的大小。为什么会这样??(PS : someClass.getValue() 返回一个 int)

我又调试了一些,意识到 dynSize 是 -1。

这里调用的构造函数是 std::vector::vector( std::size_t ) ,它需要一个无符号的数字。传递负值会导致尝试分配巨大的向量,这可能会导致立即终止。