Стандартная библиотека C (libc
) всегда связана с вашим кодом и содержит специальный код установки, который, например, знает, где и как ОС будет предоставлять аргументы командной строки, поэтому он может установить массив строк ввызовите main()
, настройте буферизацию ввода / вывода, подключите файловые дескрипторы к глобалам stdin
, stdout
и stderr
и т. д.
Этот код выделяет память, но он также должен освобождать любыересурсы, так что я также озадачен, почему DrMemory сообщит об утечках.
Одна теория может состоять в том, что GCC оптимизирует код в этом особом случае (потому что ОС устранит любые такие проблемы после завершения вашего процесса), ноЯ сомневаюсь, что.Чтобы проверить это, напечатайте что-нибудь на stdout
- это должно включить очистку.Если утечки памяти исчезли, это был сбой оптимизатора.
Или, поскольку все утечки находятся в собственном коде DLL, это ошибка Microsoft.
Попробуйте выполнить следующие действия:
Установите все пакеты обновления для вашей ОС
Сообщите об ошибке в DrMemory - возможно, они знают больше
Попробуйте скомпилировать более сложный код с опциями оптимизации и без них и разными уровнями агрессивности.
Попробуйте разные версии GCC