История изменений
Исправление 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()?