Improved MemoryManager handling of failed allocation

Now throwing a std::bad_alloc


Former-commit-id: 09c1806a0601944b5566d5cb2fe878c4af8ea0f5
This commit is contained in:
Lynix 2014-07-12 12:51:34 +02:00
parent 793ad16238
commit f2141f5756
1 changed files with 11 additions and 3 deletions

View File

@ -80,12 +80,20 @@ void* NzMemoryManager::Allocate(std::size_t size, bool multi, const char* file,
Block* ptr = reinterpret_cast<Block*>(std::malloc(size+sizeof(Block)));
if (!ptr)
{
// Pas d'information de temps (Car nécessitant une allocation)
char timeStr[23];
TimeInfo(timeStr);
FILE* log = std::fopen(s_MLTFileName, "a");
std::fprintf(log, "Failed to allocate memory (%zu bytes)\n", size);
if (file)
std::fprintf(log, "%s Failed to allocate %zu bytes at %s:%u\n", timeStr, size, file, line);
else
std::fprintf(log, "%s Failed to allocate %zu bytes at unknown position\n", timeStr, size);
std::fclose(log);
return nullptr; // Impossible d'envoyer une exception car cela allouerait de la mémoire avec new (boucle infinie)
throw std::bad_alloc();
return nullptr; // Ça me rassure d'avoir un return, aussi inutile soit-il
}
ptr->array = multi;