MiddleДебаггингЧастоЕщё не отвечали
Почему это утекает, когда doWork бросает исключение?
Эта функция освобождает буфер, но детектор утечек на неё ругается.
void process() {
int* buf = new int[1000];
doWork(buf); // может бросить исключение
delete[] buf;
}
Найдите и исправьте ошибку.
Если doWork бросает исключение, delete[] buf пропускается при раскрутке стека, и буфер утекает — ручные new/delete не безопасны при исключениях. Решение через RAII: std::vector<int> buf(1000); или auto buf = std::make_unique<int[]>(1000);, освобождаемые автоматически при раскрутке.
- ✗Считать, что ОС возвращает утёкшую кучу при исключении внутри работающего процесса
- ✗Думать, что ручные new/delete безопасны при исключениях
- ✗Перехватывать и глотать исключение вместо использования RAII
- →Какую гарантию безопасности при исключениях даёт функции вариант с RAII?
- →Почему раскрутка стека вызывает деструкторы, но не выполняет пропущенные
delete?