История изменений
Исправление
hateyoufeel,
(текущая версия)
:
Ну вот мусор в указателе – это пример «erroneous data» как раз.
Не уверен. У указателей в C есть такая штука как provenance, то есть все указатели должны изначально создаваться при наличии существующих корректных объектов. Т.е. если ты сделал что-то типа void *p = rand();, то это ошибочный код уже сам по себе.
Если у тебя интерпретатор, в котором все указатели фейковые, а не «железные», то он может на этот случай вызвать abort().
А если это типичный компилятор типа gcc, который выдаёт «настоящий» машинный код для «портабельного ассемблера», то извини, вот тебе UB по морде.
Вообще не вижу разницы. Почему в случае с GCC дефолтным значением неинициализированного указателя не может быть trap representation, вызывающий abort() при разыменовании? Это явно не добавит тормозов корректному коду вообще никак.
Исправление
hateyoufeel,
:
Ну вот мусор в указателе – это пример «erroneous data» как раз.
Не уверен. У указателей в C есть такая штука как provenance, то есть все указатели должны изначально создаваться при наличии существующих корректных объектов. Т.е. если ты сделал что-то типа void *p = rand();, то это ошибочный код уже сам по себе.
Если у тебя интерпретатор, в котором все указатели фейковые, а не «железные», то он может на этот случай вызвать abort().
А если это типичный компилятор типа gcc, который выдаёт «настоящий» машинный код для «портабельного ассемблера», то извини, вот тебе UB по морде.
Вообще не вижу разницы. Почему в случае с GCC дефолтным значением неинициализированного указателя не может быть trap representation, вызывающий abort()? Это явно не добавит тормозов корректному коду вообще никак.
Исходная версия
hateyoufeel,
:
Ну вот мусор в указателе – это пример «erroneous data» как раз.
Не уверен. У указателей в C есть такая штука как provenance, то есть все указатели должны изначально создаваться при наличии существующих корректных объектов. Т.е. если ты сделал что-то типа void *p = rand();, то это ошибочный код уже сам по себе.
Если у тебя интерпретатор, в котором все указатели фейковые, а не «железные», то он может на этот случай вызвать abort().
А если это типичный компилятор типа gcc, который выдаёт «настоящий» машинный код для «портабельного ассемблера», то извини, вот тебе UB по морде.
Вообще не вижу разницы. Почему в случае с GCC дефолтным значением неинициализированного указателя не может быть trap representation, вызывающий abort()?