Просто ради полноты, что произойдет с использованием памяти, если вы закомментируете весь блок if
и sleep
? Если там нет утечки, то я бы сказал, что вы правы относительно того, что ее вызывает.
В худшем случае, сообщите об этом MS и посмотрите, смогут ли они это исправить - у вас есть хороший простой тестовый пример, который работает больше, чем я вижу в большинстве отчетов об ошибках.
Еще одна вещь, которую вы можете попробовать, это проверить код ошибки по NO_ERROR
, а не по конкретному условию ошибки. Если вы получите ошибку, отличную от ERROR_INSUFFICIENT_BUFFER
, возможно, для этого есть утечка:
DWORD dwRetVal = GetIpAddrTable((PMIB_IPADDRTABLE)buf, &dwSize, false);
if (dwRetVal != NO_ERROR) {
printf ("ERROR: %d\n", dwRetVal);
}