Вероятно, каждый сталкивался с этой проблемой хотя бы один раз во время разработки:
while(/*some condition here that somehow never will be false*/)
{
...
yourvector.push_back(new SomeType());
...
}
Как вы видите, программа начинает истощать всю системную память, ваша программа зависает, и ваша система начинает меняться как сумасшедшая. Если вы не распознаете проблему достаточно быстро и не завершите процесс, вы, вероятно, через несколько секунд перестанете отвечать на запросы, даже если указатель мыши не будет двигаться. Вы можете либо дождаться сбоя вашей программы с ошибкой «недостаточно памяти» (это может занять несколько долгих минут), либо выполнить сброс на вашем компьютере.
Если вы не можете сразу отследить ошибку, вам понадобится несколько тестов и сбросов, чтобы выяснить, что очень раздражает ...
Я ищу, возможно, кроссплатформенный способ как-то это предотвратить. Лучшим был бы код режима отладки, который выходит из программы, если он выделил слишком много памяти, но как я могу отслеживать, сколько памяти выделено?
Переопределение глобальных операторов new и delete не поможет, потому что функция free, которую я вызову при удалении, не даст никакого представления о том, сколько байт освобождено.
Любые идеи приветствуются.