【发布时间】:2011-12-25 15:58:11
【问题描述】:
我正在开发一个相当大的 SIP 电话应用程序,有时当我们在繁重的呼叫负载下使用集成的 Web UI(使用 tntnet 编写)时,由于抛出 std::bad_alloc,程序将退出。有数百个线程在使用(每个活动调用 3 个),因此导致异常的代码位置非常随机,但总是在使用 GUI 之后。
现在,我了解到 std::bad_alloc 在内存不足时会被抛出,但在这种情况下并非如此。我还认为当堆损坏时可以抛出它,我仍在寻找它在代码库中的任何位置。
但我的问题是,除了内存不足或堆损坏之外,还有其他原因会抛出 std::bad_alloc 吗?我在 Linux 上使用 GNU g++。
【问题讨论】:
-
我不知道或见过。
-
bad_alloc 仅在分配内存失败时被抛出,但正如您所注意到的,如果您的程序做了任何未定义的事情,它可能会做任何事情,包括在未定义操作之后的任何时间抛出 bad_alloc
-
@Chris Dodd:还是在未定义行为之前,我相信!
标签: c++ linux exception g++ heap-memory