Глядя на wlanapi
примеры, которые я недавно видел следующую закономерность несколько раз:ли WlanFreeMemory() работает с NULL
if (ptr) {
WlanFreeMemory(ptr);
}
Я написал небольшую программу для вызова WlanFreeMemory
на нулевой указатель, и он выполняется без каких-либо ошибки (которые я мог наблюдать), но я все еще не убежден.
Я предположил, что это была распространенная проблема программиста, добавляющего ненужную проверку NULL
до удаления, бесплатно и т. Д. Однако я ничего не вижу на the msdn page, чтобы подтвердить, что функция безопасна для вызова с помощью NULL. Возможно, кто-то более опытный в программировании Windows знает ответ на этот вопрос?
Даже если он успешно выполняет * сейчас * без каких-либо ошибок, для этого нет контракта, поэтому он может очень хорошо изменить его поведение (например, нарушение прав доступа) в будущей версии Windows. И тогда Раймонду придется добавить совместимость для вашего приложения, потому что вы полагались на недокументированное поведение. –
@AdamRosenfield Я мог поверить, что где-то в Microsoft говорится, что «любая из наших функций позволяет свободной памяти принимать NULL и не выполнять никаких операций с ней» или что-то в этом роде. Я не очень хорошо разбираюсь в окнах api, чтобы найти его, если он существует. –