2014-06-30 4 views
0

Глядя на wlanapi примеры, которые я недавно видел следующую закономерность несколько раз:ли WlanFreeMemory() работает с NULL

if (ptr) { 
    WlanFreeMemory(ptr); 
} 

Я написал небольшую программу для вызова WlanFreeMemory на нулевой указатель, и он выполняется без каких-либо ошибки (которые я мог наблюдать), но я все еще не убежден.

Я предположил, что это была распространенная проблема программиста, добавляющего ненужную проверку NULL до удаления, бесплатно и т. Д. Однако я ничего не вижу на the msdn page, чтобы подтвердить, что функция безопасна для вызова с помощью NULL. Возможно, кто-то более опытный в программировании Windows знает ответ на этот вопрос?

+0

Даже если он успешно выполняет * сейчас * без каких-либо ошибок, для этого нет контракта, поэтому он может очень хорошо изменить его поведение (например, нарушение прав доступа) в будущей версии Windows. И тогда Раймонду придется добавить совместимость для вашего приложения, потому что вы полагались на недокументированное поведение. –

+0

@AdamRosenfield Я мог поверить, что где-то в Microsoft говорится, что «любая из наших функций позволяет свободной памяти принимать NULL и не выполнять никаких операций с ней» или что-то в этом роде. Я не очень хорошо разбираюсь в окнах api, чтобы найти его, если он существует. –

ответ

2

Указатель может не иметь значения NULL. Если null был разрешен, то указатель был бы аннотирован как _In_opt_, а не _In_.

 Смежные вопросы

  • Нет связанных вопросов^_^