代码之家  ›  专栏  ›  技术社区  ›  schorsch312

如何检查std::vector的resize是否有合适的内存

  •  1
  • schorsch312  · 技术社区  · 6 年前

    std::vector<int> vec(length);
    vec.resize(2*length);
    vec.push_back(4);
    vec.reserve(3*length);
    

    所有语句都可能抛出 bad_alloc 异常,如果分配是n次 length 整数失败(请参阅 reserve resize ).

    • 使用 try catch 子句在所有可能出现的向量内存分配中捕获异常。
    • 超载 new 并为所有事件添加异常处理。

    我维护了一个很大的代码库,因此第一个选项相当麻烦,也会破坏代码的可读性。

    检查 std::vector

    1 回复  |  直到 6 年前
        1
  •  2
  •   One Man Monkey Squad    6 年前

    Catch std::程序或模块级别的错误分配,此时您可以通过终止程序或取消模块所做的操作来正确处理它。

    :

    在模块级 在模块的入口点dostuffwhichrequiresAltOfMemory()附近添加一个try catch。确保在抛出std::bad \u alloc后,您的程序仍处于有效状态,即模块与程序的其余部分有单独的状态,或者模块正常工作,没有副作用。显示一条消息,您就完成了。

    我知道这不能直接回答这个问题,但我敦促你再考虑一下你的问题。