Como evitar a “troca da morte” durante o desenvolvimento?

Provavelmente todos enfrentaram esse problema pelo menos uma vez durante o desenvolvimento:

while(/*some condition here that somehow never will be false*/)
{
    ...
    yourvector.push_back(new SomeType());
    ...
}

Como você vê, o programa começa a drenar toda a memória do sistema, o programa trava e o sistema começa a trocar como um louco. Se você não reconhecer o problema rápido o suficiente e interromper o processo, provavelmente terá um sistema que não responde em segundos, onde o ponteiro do mouse nem se move. Você pode esperar a falha do seu programa com o erro "falta de memória" (que pode levar vários minutos) ou executar a redefinição no seu computador.

Se você não conseguir rastrear o bug imediatamente, precisará de vários testes e redefinições para descobrir o que é muito irritante ...

Estou procurando uma maneira possivelmente de plataforma cruzada para evitar isso de alguma forma. O melhor seria um código no modo de depuração que saia do programa se alocasse muita memória, mas como acompanhar a quantidade de memória alocada? A substituição dos operadores globais new e delete não ajudará, porque a função livre que eu chamaria na exclusão não dará idéia de quantos bytes são liberados.

Todas as idéias apreciadas.

questionAnswers(5)

yourAnswerToTheQuestion