好吧,如果您遇到分配内存失败的情况,那么您将获得一个
std::bad_alloc例外。异常导致程序堆栈被取消缠绕。很有可能,应用程序逻辑的内部循环不会处理内存不足的情况,只有应用程序的更高级别可以这样做。由于堆栈即将解开,因此将释放大量内存-
实际上,它应该几乎是程序所使用的所有内存。
一个例外是当您请求无法满足的很大(例如几百MB)内存块时。但是,当发生这种情况时,通常会剩下足够小的内存块,这将使您能够优雅地处理故障。
堆栈展开是您的朋友;)
编辑: 刚意识到这个问题也用C标记了-如果是这种情况,那么当发现内存不足的情况时,您应该让您的函数手动释放其内部结构;不这样做是内存泄漏。
EDIT2: 示例:
#include <iostream>#include <vector>void DoStuff(){ std::vector<int> data; //insert a whole crapload of stuff into data here. //Assume std::vector::push_back does the actual throwing //i.e. data.resize(SOME_LARGE_VALUE_HERE);}int main(){ try { DoStuff(); return 0; } catch (const std::bad_alloc& ex) { //Observe that the local variable `data` no longer exists here. std::cerr << "Oops. Looks like you need to use a 64 bit system (or " "get a bigger hard disk) for that calculation!"; return -1; }}EDIT3:
好的,据评论员说,有一些系统在这方面没有遵循标准。另一方面,在这样的系统上,无论如何您都将成为SOL,所以我不明白为什么他们值得讨论。但是,如果您使用的
是 这样的平台,则应牢记这一点。



