我的程序中有一个相当严重的错误——偶尔调用 new() 会抛出一个 bad_alloc。
从我可以在 bad_alloc 上找到的文档中,它似乎是由于以下原因而抛出的:
当计算机内存不足时(这绝对没有发生,我有 4GB 的 RAM,当使用少于 5MB 的内存(在任务管理器中检查)时程序抛出 bad_alloc,而后台没有任何严重的运行)。
如果内存变得太碎片化而无法分配新块(这同样不太可能 - 我曾经分配的最大块大小约为 1KB,并且在崩溃发生之前不会超过 100 次)。
根据这些描述,我真的没有任何地方可以抛出 bad_alloc。
但是,我正在运行的应用程序运行多个线程,这可能是导致问题的原因。通过在单个线程上测试所有对象,一切似乎都很顺利。我能想到的唯一另一件事可能是同时在多个地方调用 new() 引起的某种竞争条件,但我尝试添加互斥锁以防止这种行为没有效果。
因为程序有几百行,而且我不知道问题出在哪里,所以我不确定要发布什么(如果有的话)代码片段。相反,我想知道是否有任何工具可以帮助我测试这种事情,或者是否有任何通用策略可以帮助我解决这个问题。
我正在使用 Microsoft Visual Studio 2008 和 Poco 进行线程处理。