Большие блоки с покрытием не будут работать.
- В зависимости от операционной системы вы не ограничены реальной физической памятью, и неиспользованные большие блоки могут потенциально просто быть выгружены на диск.
- Кроме того, это очень затрудняет сбой вашей памяти именно тогда, когда вы хотите, чтобы он вышел из строя.
Что вам нужно сделать, так это написать собственную версию команды new / delete, которая не выполняется по команде.
Что-то вроде этого:
#include <memory>
#include <iostream>
int memoryAllocFail = false;
void* operator new(std::size_t size)
{
std::cout << "New Called\n";
if (memoryAllocFail)
{ throw std::bad_alloc();
}
return ::malloc(size);
}
void operator delete(void* block)
{
::free(block);
}
int main()
{
std::auto_ptr<int> data1(new int(5));
memoryAllocFail = true;
try
{
std::auto_ptr<int> data2(new int(5));
}
catch(std::exception const& e)
{
std::cout << "Exception: " << e.what() << "\n";
}
}
> g++ mem.cpp
> ./a.exe
New Called
New Called
Exception: St9bad_alloc