C ++ allocator <X>:: deallocate (NULL, 1) разрешен? - PullRequest
6 голосов
/ 23 июня 2010

Допускаются как free(NULL), так и ::operator delete(NULL).Концепция распределителя (например, std :: allocator также допускает deallocate(NULL,1), или это необходимо для защиты вашей системы?

1 Ответ

9 голосов
/ 23 июня 2010

Вам нужно будет добавить свой чек.

Согласно §20.4. 1.1 / 8, deallocate требует:

p должно быть значением указателя, полученным из allocate (). n должно равняться значению, переданному как первый аргумент для вызова allocate, который возвратил p.

allocate выдает исключение, когда память не может быть предоставлена ​​(§20.4. 1.1 / 7). Другими словами, allocate никогда не возвращает 0, и, следовательно, deallocate никогда не должен получать 0. Передача 0 приведет к неопределенному поведению.

...