ну все так, как и должно быть... что любопытного то? ну как бы ваша программа никак не может себя защитить от вас же))
Это не гарантируется. С99, 7.20.3 If the size of the space requested is zero, the behavior is implementationdefined: either a null pointer is returned, or the behavior is as if the size were some nonzero value, except that the returned pointer shall not be used to access an object. Так что даже если вернётся валидный указатель - его нельзя использовать для доступа к объекту.
ну это в принципе естественно (хотя во многих реализациях CRT есть проверка на нулевой размер), поскольку, если верить MSDN: то есть, запросили 0 байт - получили 0 байт))) ну как не важно?. ваш пример немного некорректен... скажите, что будет в таком случае: Код (Text): char* ptr = malloc(0); ptr[0] = '\0'; эксесвайолейтинг?))) ЗЫ стоит еще вспомнить realloc после malloc(0), realloc на ноль после ненулевого malloc и free(NULL)
вы виноваты в том, что решаете такую задачу через шаблоны... именно поэтому в макросах и нет рекурсии как таковой, в бусте ее сделали фиксированную до 256ого включения 256тью макросами... программа не защищена от ее автора, авторы транслятора тоже не могут предположить всех дурацких вариантов кода...
Вы знаете такое понятие "пример"? Если не можешь распарсить шаблоны - выдай соответствующее сообщение, а не кидай эксепшн.
обратитесь по нулевому адресу - тоже будет эксепшн... и никто вам не будет сообщение при компиляции выдавать... какие претензии могут быть к языку или транслятору... я еще раз говорю, авторы трансляторов не виноваты, что программисты пишут xepню... вообще у вас странные вопросы... я думаю, что язык D вам не подойдет... займитесь лучше Руби или Питоном... там у вас меньше вопросов будет возникать...
Rel, с Вами всё в порядке? По вашему нормальная программа должна упасть если ей на вход подаются косячные данные? Как я в компиляторе могу обратиться по нулевому адресу? Такое ощущение, что мы в Вами говорим о разных вещах. Ещё раз: компилирую кусок кода [..]. Компилятор вместо того, чтобы выдать ошибку компиляции кидает необработанный эксепшн, вылазит окошко "приложение cl.exe выполнило недопустимую операцию и будет закрыто.. отправить отчёт?" Гсс при компиляции этого же куска зацикливается. По Вашему это нормальное поведение?
да... благодаря этому и существует тонна самых разнообразных эксплойтов... ну это сложно, тут надо думать... надо знать, как работает оптимизатор, и на каких настройках (при каких условиях) он может обратиться к нулевому указателю... на темплейтах так не сделаешь наверное, так как в них особо с указателями не поработаешь... надо копать в сторону обработки константных выражений, как первый ваш "любопытный" пример... да вполне... вы фактически вывели констатное выражение своим примером... компилятор был достаточно грамотен, чтобы это понять... так что вместо того, чтобы генерировать лишний код, он попытался просчитать ваш код и привести его к константе... но поскольку вы так небрежно глубоко изобразили рекурсию в шаблонах, он упал... отчего - это уже другой разговор, скорее всего переполнил что-нибудь... когда весьма грамотные, но все же люди предумывали язык и писали компилятор они не могли предположить всех глупостей, которые могут понаписать программисты... и кстати поздравляю, вы возможно придумали эксплойт для cl.exe ниже определенной версии, осталось понять как его использовать и нужно ли это вообще)))