Для чего может понадобиться такая конструкция и почему при запросе 0 байт возвращается указатель.
char* pC = new char[0];
куда указывает указатель в данном примере?
Ответ
Представьте себе, что вы пишете собственный класс-контейнер наподобие vector
Другой пример, пускай в вашем коде нужен массив из N пользователей, где N приходит от пользователя. Запрещать 0 пользователей, и кодировать этот случай по-другому было бы глупо и чревато ошибками.
Ну или вы разбираете HTML-документ, и возвращаете все найденные ссылки. Если их ноль, какого размера выделять под них массив?
Ноль — нормальный частный случай числа. Если бы стандарт сделал массивы длиной в ноль отдельным случаем, то и в нашем коде приходилось бы обрабатывать этот случай отдельно. Зачем? Пользы от этого никакой, а только возможный вред.
(Да, отрицательные числа — не нормальный случай. У нас может быть ноль пользователей, но не может быть −1 пользователь.)
Ваш код возвращает какой-то ненулевой указатель. Сколько именно байт реально аллоцируется — подробности имплементации стандартной библиотеки вашего компилятора. В любом случае вы не имеете права разыменовывать полученный указатель.
Комментариев нет:
Отправить комментарий