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
是由两个根本原因之一引起的:
未初始化大小:
int size;
if (something) {
// assign to size here
}
std::vector v(size); // Oops: size may be unintialized.
算术下溢:
std::vector v(other_vector.size() - 20);
在这里,如果other_vector.size() < 20
,您将获得巨大的价值。
我有一个大项目,编译很好,但有时当我 运行 在终端中时(有时不是)
./run
它给出了 bad_alloc 异常,所以我认为使用 gdb 进行回溯可能会有所帮助,所以我这样做了
gdb ./run
run
它奇怪地正常退出,没有出现任何错误,即使我尝试了很多次。 有人遇到过类似的问题吗?
请参阅 this answer 了解 GDB "inside" 与 "outside" 的不同之处,以及如何应对。
如果您可以启用核心转储 (ulimit -c unlimited
),那应该会为您提供另一种获取堆栈跟踪的方法。
根据我的经验,大多数 bad_alloc
是由两个根本原因之一引起的:
未初始化大小:
int size; if (something) { // assign to size here } std::vector v(size); // Oops: size may be unintialized.
算术下溢:
std::vector v(other_vector.size() - 20);
在这里,如果
other_vector.size() < 20
,您将获得巨大的价值。