使用c ++中的向量的bad_alloc异常

0 c++ vector bad-alloc

我用c ++编程不是很专业,所以我的问题可能看起来有点愚蠢,但我无法理解我做错了什么.

我想用指令分配一个向量

vector <short int> myvec(rowotot * coltot)
Run Code Online (Sandbox Code Playgroud)

为了表示矩阵.

在继续之前,我想验证我是否有足够的空间来分配我的向量.如果我使用

try { 
    vector <short int> myvec(rowtot * coltot);
}
catch (bad_alloc& ba) {
    cert << "ERROR: ";
    cerr << ba.what() << endl;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试修改向量的元素,我不能因为

myvec未在此范围内声明

在保存向量中的任何值之前,如何检查内存?我希望我的问题很明确.

Nat*_*ica 7

一个简单的解决方案是将向量声明到try块之外,然后用于std::vector::reserve在try-catch块中分配空间.

std::vector<short int> myvec;
try
{
    myvec.reserve(rowotot*coltot);
}
catch (const bad_alloc& ba) 
{
    cerr <<"ERROR: ";
    cerr << ba.what() << endl;
}
Run Code Online (Sandbox Code Playgroud)

这会将向量放在外部作用域中,但允许分配可捕获.

如果你需要rowotot*coltot包含已经包含元素的向量,那么你可以使用相同的东西,但要么调用std::vector::resize来创建项目,要么创建一个临时向量并将其分配给myvec.

std::vector<short int> myvec;
try
{
    myvec.resize(rowotot*coltot);
    // or
    myvec = std::vector<short int>(rowotot*coltot);
}
catch (const bad_alloc& ba) 
{
    cerr <<"ERROR: ";
    cerr << ba.what() << endl;
}
Run Code Online (Sandbox Code Playgroud)

我也改成了catch (bad_alloc& ba),catch (const bad_alloc& ba)因为它更喜欢赶上const &