c++ bad_alloc, 但它在 gdb 中消失了

c++ bad_alloc, but it disappear in gdb

我有一个大项目,编译很好,但有时当我 运行 在终端中时(有时不是)

./run

它给出了 bad_alloc 异常,所以我认为使用 gdb 进行回溯可能会有所帮助,所以我这样做了

gdb ./run
run

它奇怪地正常退出,没有出现任何错误,即使我尝试了很多次。 有人遇到过类似的问题吗?

请参阅 this answer 了解 GDB "inside" 与 "outside" 的不同之处,以及如何应对。

如果您可以启用核心转储 (ulimit -c unlimited),那应该会为您提供另一种获取堆栈跟踪的方法。

根据我的经验,大多数 bad_alloc 是由两个根本原因之一引起的:

  1. 未初始化大小:

    int size; if (something) { // assign to size here } std::vector v(size); // Oops: size may be unintialized.

  2. 算术下溢:

    std::vector v(other_vector.size() - 20);

    在这里,如果other_vector.size() < 20,您将获得巨大的价值。