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.