【发布时间】:2014-05-15 12:48:13
【问题描述】:
我正在尝试保存一个充满指向 Circle 对象的指针的向量。 有时 bad_alloc 捕获有效,但有时无效,然后我收到错误消息:
此应用程序已请求运行时以不寻常的方式终止它。 请联系应用程序的支持团队了解更多信息。”
也许向量数组不能分配更多的内存......但是 bad_alloc 没有抓住它。
Circle *ptr;
vector<Circle*> ptrarray;
try{
for (long long i = 0; i < 80000000; i++) {
ptr = new Circle(1,i);
ptrarray.push_back(ptr);
}
}catch(bad_alloc &ba){
cout << "Memory Leak" << endl;
}
如果有人可以帮助我,那就太好了;) 提前致谢
【问题讨论】:
-
请添加编译器/操作系统标签。如果系统使用延迟分配,它会解释这一点。发布一个完整的程序也很有用,因此其他人可以重现(并检查您未显示的代码中没有错误)。
-
如果您真的内存不足,可能甚至没有足够的资源来运行您的处理程序(例如,
cout内部的某处可能存在动态分配,可能会触发第二次未捕获的抛出),在这种情况下,程序将只是 abort() 并且您将收到您引用的消息。 -
@dlf 体内有什么需要创建的吗?可能会隐式转换为
std::string,但我不这么认为。我认为就处理程序的范围而言,一切都是静态的。如果没有足够的内存用于处理机制本身,那就太奇怪了……如果需要任何额外的东西。 -
@luk32 我不知道;我们看到的代码中没有任何内容,但我不知道
<<在内部做什么,也不知道bad_alloc的构造函数。 -
@dlf 好吧,即使... IMO 应该在
try的开头保留一些内存,以确保这样一个简单的处理程序不会出现内存问题。我觉得相当危险。即使在其他异常的情况下,如果您处于 OOM 的边缘,您也可以通过这么简单的事情来炸毁。
标签: c++ vector alloc bad-alloc