实际上,使用现代操作系统,您不太可能耗尽内存。在你这样做之前,机器会频繁更换,以至于它或多或少地无法使用——你不能错过。此外,当我几年前使用 Win2k 进行实验时,我发现当我的测试应用程序分配尽可能多的内存时,几乎每个应用程序都会崩溃。(这包括调试器、办公应用程序、浏览器、电子邮件应用程序,甚至记事本。)
所以我假设你要么试图分配一个不合理的大数量,要么堆变得非常碎片化,以至于它甚至无法满足合理的请求。
以这种方式编写代码怎么样:
// for example
const std::size_t arbitrary_max_size_constant = std::vector<float>::max_size();
// or std::nummeric_traits<std::size_T>.max() / 10;
if (texture!=NULL){
assert(mesh->numSurfacePoints < arbitrary_max_size_constant);
texCoords = new float[mesh->numSurfacePoints*2];
// ...
}
如果您的程序有错误,这将在调试模式下提醒您,但不会减慢发布代码。另一种可能性是您捕获异常并打印程序试图分配的内存:
if (texture!=NULL) {
try {
texCoords = new float[mesh->numSurfacePoints*2];
} catch(const std::bad_alloc& x) {
std::cerr << "failed to allocate << mesh->numSurfacePoints*2 << " bytes!\n";
throw;
}
// ...
}
通过这种方式,您还将看到该值是否大得不合理。如果是,你就有了一个错误,如果不是,你要么内存不足,要么堆太碎片化,无法在这个地方分配程序需要的数量。