Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save zamabuvaraeu/66498a380c48a274f0ee4a2c8f4d0384 to your computer and use it in GitHub Desktop.

Select an option

Save zamabuvaraeu/66498a380c48a274f0ee4a2c8f4d0384 to your computer and use it in GitHub Desktop.
Перевод

J.2 Неопределенное поведение 1 Поведение не определено при следующих обстоятельствах:

Требование "должен" или "не должен", которое выходит за рамки ограничения, нарушено (пункт 4).

Непустой исходный файл не заканчивается символом новой строки, которому непосредственно не предшествует символ обратной косой черты, или заканчивается символом частичной предварительной обработки или комментарием (5.1.1.2).

Конкатенация токенов создает последовательность символов, соответствующую синтаксису универсального символьного имени (5.1.1.2).

Программа в размещенной среде не определяет функцию с именем main , используя одну из указанных форм (5.1.2.2.1).

Символ, отсутствующий в базовом наборе символов исходного кода, встречается в исходном файле, за исключением идентификатора, символьной константы, строкового литерала, имени заголовка, комментария или токена предварительной обработки, который никогда не преобразуется в токен (5.2.1).

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

Один и тот же идентификатор имеет как внутреннюю, так и внешнюю привязку в одной и той же единице перевода (6.2.2).

На объект ссылаются вне срока его службы (6.2.4).

Используется значение указателя на объект, время жизни которого закончилось (6.2.4).

Значение объекта с автоматической продолжительностью хранения используется, пока оно не определено (6.2.4, 6.7.8, 6.8).

Представление trap считывается выражением lvalue , которое не имеет символьного типа (6.2.6.1).

Представление ловушки создается побочным эффектом, который изменяет любую часть объекта с использованием выражения lvalue , которое не имеет символьного типа (6.2.6.1).

Аргументы для определенных операторов таковы, что могут привести к отрицательному нулевому результату, но реализация не поддерживает отрицательные нули (6.2.6.2).

Два объявления одного и того же объекта или функции определяют типы, которые несовместимы (6.2.7).

Преобразование в целочисленный тип или из него дает значение, выходящее за пределы диапазона, который может быть представлен (6.3.1.4).

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

Значение lvalue не обозначает объект при оценке (6.3.2.1).

Значение lvalue, не являющееся массивом, с неполным типом используется в контексте, который требует значения обозначенного объекта (6.3.2.1).

Значение lvalue , имеющее тип array, преобразуется в указатель на начальный элемент массива, а объект array имеет класс хранения регистров (6.3.2.1).

Предпринята попытка использовать значение выражения void, или к выражению void применяется неявное или явное преобразование (за исключением void) (6.3.2.2).

Преобразование указателя в целочисленный тип приводит к значению, выходящему за пределы диапазона, который может быть представлен (6.3.2.3).

Преобразование между двумя типами указателей приводит к неправильному выравниванию (6.3.2.3).

Указатель используется для вызова функции, тип которой несовместим с типом, на который указывается (6.3.2.3).

Во время токенизации в строке логического источника встречается не имеющий соответствия символ "или" (6.4).

Зарезервированный маркер ключевого слова используется на этапе перевода 7 или 8 для какой-либо иной цели, кроме как в качестве ключевого слова (6.4.1).

Универсальное символьное имя в идентификаторе не обозначает символ, кодировка которого попадает в один из указанных диапазонов (6.4.2.1).

Начальный символ идентификатора - это универсальное символьное имя, обозначающее цифру (6.4.2.1).

Два идентификатора отличаются только незначащими символами (6.4.2.1).

Идентификатор func объявлен явно (6.4.2.2).

Программа пытается изменить строковый литерал (6.4.5).

Символы ", , ", // или /* встречаются в последовательности между разделителями < и >, или символы ", , // или /*" встречаются в последовательности между разделителями "" в маркере предварительной обработки имени заголовка (6.4.7).

Между двумя точками последовательности объект модифицируется более одного раза или модифицируется и считывается предыдущее значение, отличное от определения значения, которое будет сохранено (6.5).

Во время вычисления выражения возникает исключительное условие (6.5).

Доступ к сохраненному значению объекта возможен не через lvalue допустимого типа (6.5).

Предпринята попытка изменить результат вызова функции, условного оператора, оператора присваивания или оператора запятой, или получить к нему доступ после следующей точки последовательности (6.5.2.2, 6.5.15, 6.5.16, 6.5.17).

Для вызова функции без прототипа функции в области видимости количество аргументов не равно количеству параметров (6.5.2.2).

Для вызова функции без прототипа функции в области видимости, где функция определена с помощью прототипа функции, либо прототип заканчивается многоточием, либо типы аргументов после продвижения несовместимы с типами параметров (6.5.2.2).

Для вызова функции без прототипа функции в области видимости, где функция не определена с помощью прототипа функции, типы аргументов после расширения несовместимы с типами параметров после расширения (за некоторыми исключениями) (6.5.2.2).

Функция определена с типом, который несовместим с типом (выражения), на который указывает выражение, обозначающее вызываемую функцию (6.5.2.2).

Операнд унарного оператора * имеет недопустимое значение (6.5.3.2).

Указатель преобразуется в тип, отличный от целого числа или типа указателя (6.5.4).

Значение второго операнда оператора / или % равно нулю (6.5.5).

Сложение или вычитание указателя на объект массива или сразу за ним и целочисленного типа приводит к результату, который не указывает на тот же объект массива или сразу за ним (6.5.6).

Сложение или вычитание указателя на объект array или сразу за ним и целочисленного типа приводит к результату, который указывает сразу за объектом array и используется в качестве операнда вычисляемого унарного оператора * (6.5.6).

Указатели, которые не указывают на один и тот же объект массива или сразу за его пределами, вычитаются (6.5.6).

Нижний индекс массива находится вне диапазона, даже если объект, по-видимому, доступен с заданным нижним индексом (как в выражении lvalue a[1][7] с учетом объявления int a[4][5]) (6.5.6).

Результат вычитания двух указателей не может быть представлен в объекте типа ptrdiff_t (6.5.6).

Выражение сдвигается на отрицательное число или на величину, большую или равную ширине расширенного выражения (6.5.7).

Выражение, имеющее подписанный повышенный тип, сдвинуто влево, и либо значение выражения отрицательное, либо результат сдвига будет недоступен для представления в повышенном типе (6.5.7).

Указатели, которые не указывают на один и тот же агрегат или объединение (или сразу за пределы одного и того же объекта массива), сравниваются с использованием операторов отношения (6.5.8).

Объект присваивается неточно перекрывающемуся объекту или точно перекрывающемуся объекту с несовместимым типом (6.5.16.1).

Выражение, которое должно быть выражением с целочисленной константой, не имеет целочисленного типа; имеет операнды, которые не являются целочисленными константами, константы перечисления, символьные константы, выражения sizeof, результатами которых являются целочисленные константы, или плавающие константы с немедленным приведением; или содержит приведения (внешние операнды к операторам sizeof), отличные от преобразований арифметических типов в целочисленные типы (6.6).

Константное выражение в инициализаторе не является или не вычисляется как одно из следующих: арифметическое константное выражение, константа нулевого указателя, константа адреса или константа адреса для типа объекта плюс или минус целочисленное константное выражение (6.6).

Выражение с арифметической константой не имеет арифметического типа; имеет операнды, которые не являются целочисленными константами, константами с плавающей запятой, константами перечисления, символьными константами или выражениями sizeof; или содержит приведения (внешние операнды к операторам sizeof) , отличные от преобразований арифметических типов в арифметические типы (6.6).

Доступ к значению объекта осуществляется с помощью подстрочного индекса массива [], оператора доступа к элементу . или ->, адреса & или косвенного обращения * или указателя, приведенного при создании адресной константы (6.6).

Идентификатор объекта объявляется без привязки, а тип объекта является неполным после его декларатора или после его init-декларатора, если у него есть инициализатор (6.7).

Функция объявляется в области действия блока с явным указанием класса хранилища, отличным от extern (6.7.1).

Структура или объединение определяются как не содержащие именованных членов (6.7.2.1).

Предпринимается попытка получить доступ или сгенерировать указатель на только что прошедший гибкий элемент массива структуры, когда объект, на который ссылается, не предоставляет элементов для этого массива (6.7.2.1).

Когда требуется полный тип, неполная структура или объединяющий тип не завершается в той же области другим объявлением тега, который определяет содержимое (6.7.2.3).

Предпринята попытка изменить объект, определенный с постоянным типом, посредством использования значения lvalue с неконстантным типом (6.7.3).

Предпринята попытка сослаться на объект, определенный с изменяемым типом, используя значение lvalue с изменяемым типом (6.7.3).

Спецификация типа функции включает любые определители типа (6.7.3).

Два квалифицированных типа, которые должны быть совместимы, не имеют идентичной версии совместимого типа (6.7.3).

Доступ к измененному объекту осуществляется через указатель с ограничениями на тип с ограничениями на const или через указатель с ограничениями и другой указатель, которые не основаны на одном и том же объекте (6.7.3.1).

Указателю с ограничениями присваивается значение на основе другого ограниченного указателя, связанный блок которого не начинал выполнение раньше блока, связанного с этим указателем, и не заканчивался до назначения (6.7.3.1).

Функция с внешней связью объявляется с помощью встроенного спецификатора функции, но также не определяется в той же единице преобразования (6.7.4).

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

Выражение размера в объявлении массива не является постоянным выражением и во время выполнения программы принимает неположительное значение (6.7.5.2).

В контексте, требующем совместимости двух типов массивов, у них нет совместимых типов элементов, или их спецификаторы размера принимают неодинаковые значения (6.7.5.2).

Объявление параметра массива включает ключевое слово static в [ и ] , и соответствующий аргумент не предоставляет доступ к первому элементу массива, содержащего по крайней мере указанное количество элементов (6.7.5.3).

Спецификатор класса хранилища или определитель типа изменяет ключевое слово void как список типов параметров функции (6.7.5.3).

В контексте, требующем совместимости двух типов функций, они не имеют совместимых возвращаемых типов, или их параметры расходятся в использовании многоточия или количестве и типе параметров (после выдвижения аргумента по умолчанию, когда нет списка типов параметров или когда один тип указан в определении функции со списком идентификаторов) (6.7.5.3).

Используется значение неназванного элемента структуры или объединения (6.7.8).

Инициализатор для скаляра не является ни отдельным выражением, ни одиночным выражением, заключенным в фигурные скобки (6.7.8).

Инициализатор для структуры или объекта объединения, у которого есть автоматический срок хранения, не является ни списком инициализаторов, ни отдельным выражением, имеющим совместимый тип структуры или объединения (6.7.8).

Инициализатор для агрегата или объединения, отличный от массива, инициализированного строковым литералом, не является заключенным в скобки списком инициализаторов для его элементов или членов (6.7.8).

Используется идентификатор с внешней привязкой, но в программе не существует ровно одного внешнего определения идентификатора, или идентификатор не используется, и для идентификатора существует несколько внешних определений (6.9).

Определение функции включает список идентификаторов, но типы параметров не объявлены в следующем списке объявлений (6.9.1).

Скорректированный тип параметра в определении функции не является типом объекта (6.9.1).

Функция, которая принимает переменное количество аргументов, определяется без списка типов параметров, который заканчивается многоточием (6.9.1).

Достигнуто значение }, которое завершает функцию, и вызывающая функция использует значение вызова функции (6.9.1).

Идентификатор объекта с внутренней связью и неполным типом объявляется с предварительным определением (6.9.2).

Определенный токен генерируется во время расширения директивы предварительной обработки #if или #elif, или использование определенного унарного оператора не соответствует одной из двух указанных форм до замены макроса (6.10.1).

Директива предварительной обработки #include , которая выдается после расширения, не соответствует ни одной из двух форм имени заголовка (6.10.2).

Последовательность символов в директиве предварительной обработки #include не начинается с буквы (6.10.2).

В списке аргументов макроса есть последовательности токенов предварительной обработки, которые в противном случае действовали бы как директивы предварительной обработки (6.10.3).

Результатом предварительной обработки operator # не является допустимый символьный строковый литерал (6.10.3.2).

Результатом работы оператора предварительной обработки ## не является допустимый токен предварительной обработки (6.10.3.3).

Директива предварительной обработки #line, которая выдается после расширения, не соответствует одной из двух четко определенных форм, или ее последовательность цифр указывает ноль или число, большее 2147483647 (6.10.4).

Обнаружена директива предварительной обработки # pragma, отличная от STDC, которая задокументирована как вызывающая сбой трансляции или какую-либо другую форму неопределенного поведения (6.10.6).

Директива о предварительной обработке #pragma STDC не соответствует одной из четко определенных форм (6.10.6).

Имя предопределенного макроса или определенный идентификатор являются предметом директивы предварительной обработки #define или #undef (6.10.8).

Предпринята попытка скопировать объект в перекрывающийся объект с помощью библиотечной функции, отличной от явно разрешенной (например, memmove) (пункт 7).

Файл с тем же именем, что и один из стандартных заголовков, не предоставленный как часть реализации, помещается в любое из стандартных мест, в которых выполняется поиск включенных исходных файлов (7.1.2).

Заголовок включается во внешнее объявление или определение (7.1.2).

Функция, объект, тип или макрос, которые указаны как объявленные или определенные некоторым стандартным заголовком, используются до включения любого заголовка, который их объявляет или определяет (7.1.2).

Включен стандартный заголовок, а макрос определен с тем же именем, что и ключевое слово (7.1.2).

Программа пытается объявить библиотечную функцию самостоятельно, а не через стандартный заголовок, но объявление не имеет внешней привязки (7.1.2).

Программа объявляет или определяет зарезервированный идентификатор, отличный от разрешенного в 7.1.4 (7.1.3).

Программа удаляет определение макроса, имя которого начинается с подчеркивания и либо с заглавной буквы, либо с другого подчеркивания (7.1.3).

Аргумент библиотечной функции имеет недопустимое значение или тип, не ожидаемый функцией с переменным количеством аргументов (7.1.4).

Указатель, передаваемый параметру массива библиотечной функции, не имеет такого значения, чтобы все вычисления адресов и обращения к объектам были допустимыми (7.1.4).

Макроопределение assert подавляется для доступа к фактической функции (7.2).

Аргумент макроса assert не имеет скалярного типа (7.2).

Прагма CX_LIMITED_RANGE, FENV_ACCESS или FP_CONTRACT используется в любом контексте, кроме как вне всех внешних объявлений или перед всеми явными объявлениями и операторами внутри составного оператора (7.3.4, 7.6.1, 7.12.2).

Значение аргумента функции обработки символов не равно значению EOF и не может быть представлено в виде символа без знака (7.4).

Макроопределение errno подавляется для доступа к реальному объекту, или программа определяет идентификатор с именем errno (7.5).

Часть программы проверяет флаги состояния с плавающей запятой, устанавливает режимы управления с плавающей запятой или выполняется с настройками режима, отличными от стандартных, но была переведена с состоянием для прагмы FENV_ACCESS "выкл" (7.6.1).

Аргумент маски исключения для одной из функций, которые предоставляют доступ к флагам состояния с плавающей запятой, имеет ненулевое значение, не получаемое побитовым способом Или макросами исключений с плавающей запятой (7.6.2).

Функция fesetexceptflag используется для установки флагов состояния с плавающей запятой, которые не были указаны при вызове функции fegetexceptflag , которая предоставила значение соответствующего объекта fexcept_t (7.6.2.4).

Аргумент fesetenv или feupdateenv не является ни объектом, установленным вызовом fegetenv или feholdexcept , ни макрокомандой среды (7.6.4.3, 7.6.4.4).

Значение результата целочисленной арифметики или функции преобразования не может быть представлено (7.8.2.1, 7.8.2.2, 7.8.2.3, 7.8.2.4, 7.20.6.1, 7.20.6.2, 7.20.1).

Программа изменяет строку, на которую указывает значение, возвращаемое функцией setlocale (7.11.1.1).

Программа изменяет структуру, на которую указывает значение, возвращаемое функцией localeconv (7.11.2.1).

Макроопределение math_errhandling подавлено или программа определяет идентификатор с именем math_errhandling (7.12).

Аргумент макроса классификации или сравнения с плавающей запятой не имеет реального плавающего типа (7.12.3, 7.12.14).

Макроопределение setjmp подавляется для доступа к реальной функции, или программа определяет внешний идентификатор с именем setjmp (7.13).

Вызов макроса setjmp происходит не в разрешенном контексте (7.13.2.1).

Функция longjmp вызывается для восстановления несуществующей среды (7.13.2.1).

После longjmp происходит попытка получить доступ к значению объекта класса автоматического хранения с типом, определяемым как энергонезависимый, локального для функции, содержащей вызов соответствующего макроса setjmp, который был изменен между вызовом setjmp и longjmp (7.13.2.1).

Программа указывает недопустимый указатель на функцию обработки сигналов (7.14.1.1).

Обработчик сигнала возвращает результат, когда сигнал соответствует вычислительному исключению (7.14.1.1).

Сигнал возникает в результате вызова функции прерывания или повышения, и обработчик сигнала вызывает функцию повышения (7.14.1.1).

Сигнал возникает иначе, чем в результате вызова функции прерывания или повышения уровня, и обработчик сигнала ссылается на объект со статическим сроком хранения иначе, чем путем присвоения значения объекту, объявленному как volatile sig_atomic_t , или вызывает любую функцию в стандартной библиотеке, отличную от функции прерывания, функции _Exit или функции signal (для того же номера сигнала) (7.14.1.1).

Значение errno упоминается после того, как произошел сигнал, отличный от результата вызова функции прерывания или повышения уровня, и соответствующий обработчик сигнала получил возврат SIG_ERR из вызова функции сигнала (7.14.1.1).

Сигнал генерируется асинхронным обработчиком сигналов (7.14.1.1).

Функция с переменным числом аргументов пытается получить доступ к своим изменяющимся аргументам не через должным образом объявленный и инициализированный объект va_list или до вызова макроса va_start (7.15, 7.15.1.1, 7.15.1.4).

Макрос va_arg вызывается с использованием параметра ap , который был передан функции, которая вызвала макрос va_arg с тем же параметром (7.15).

Макроопределение va_start , va_arg, va_copy или va_end подавляется для доступа к реальной функции, или программа определяет внешний идентификатор с именем va_copy или va_end (7.15.1).

Макрос va_start или va_copy вызывается без соответствующего вызова макроса va_end в той же функции или наоборот (7.15.1, 7.15.1.2, 7.15.1.3, 7.15.1.4).

Параметр type в макросе va_arg не таков, чтобы указатель на объект этого типа можно было получить простым постфиксом a * (7.15.1.1).

Макрос va_arg вызывается, когда нет фактического следующего аргумента или с указанным типом, который несовместим с повышенным типом фактического следующего аргумента, за некоторыми исключениями (7.15.1.1).

Макрос va_copy или va_start вызывается для инициализации va_list , который ранее был инициализирован любым из макросов , без промежуточного вызова макроса va_end для того же самого va_list (7.15.1.2, 7.15.1.4).

Параметр parmN макроса va_start объявляется с классом хранения регистров, с типом функции или массива или с типом, который несовместим с типом, который возникает после применения повышений аргумента по умолчанию (7.15.1.4).

Параметр обозначения элемента макроса offsetof является недопустимым правым операндом . оператор для параметра типа или обозначает битовое поле (7.17).

Аргумент в экземпляре одного из макросов с целочисленной константой не является десятичной, восьмеричной или шестнадцатеричной константой, или он имеет значение, превышающее ограничения для соответствующего типа (7.18.4).

Функция ввода/ вывода в байтах применяется к широкоориентированному потоку, или функция ввода/вывода в широких символах применяется к потоку, ориентированному в байтах (7.19.2).

Используется любая часть файла, кроме самого последнего расширенного символа, записанного в широкоориентированный поток (7.19.2).

Значение указателя на файловый объект используется после закрытия связанного файла (7.19.3).

Поток для функции fflush указывает на входной поток или на поток обновления, в который была введена самая последняя операция (7.19.5.2).

Строка , на которую указывает аргумент mode в вызове функции fopen , не соответствует в точности ни одной из указанных последовательностей символов (7.19.5.3).

За операцией вывода в потоке обновления следует операция ввода без промежуточного вызова функции fflush или функции позиционирования файла, или за операцией ввода в потоке обновления следует операция вывода с промежуточным вызовом функции позиционирования файла (7.19.5.3).

Предпринята попытка использовать содержимое массива, который был предоставлен при вызове функции setvbuf (7.19.5.6).

При вызове одной из функций форматированного ввода/ вывода недостаточно аргументов для формата, или аргумент не имеет соответствующего типа (7.19.6.1, 7.19.6.2, 7.24.2.1, 7.24.2.2).

Формат в вызове одной из функций форматированного ввода / вывода или функции strftime или wcsftime не является допустимой последовательностью многобайтовых символов, которая начинается и заканчивается в исходном состоянии сдвига (7.19.6.1, 7.19.6.2, 7.23.3.5, 7.24.2.1, 7.24.2.2, 7.24.5.1).

При вызове одной из функций форматированного вывода отображается значение точности со спецификатором преобразования, отличным от описанных (7.19.6.1, 7.24.2.1).

В спецификации преобразования для функции форматированного вывода используется звездочка для обозначения ширины или точности поля, предоставленного аргументом, но соответствующий аргумент не предоставлен (7.19.6.1, 7.24.2.1).

Спецификация преобразования для функции форматированного вывода использует флаг # или 0 со спецификатором преобразования, отличным от описанных (7.19.6.1, 7.24.2.1).

Спецификация преобразования для одной из форматированных функций ввода/вывода использует модификатор длины со спецификатором преобразования, отличным от описанных (7.19.6.1, 7.19.6.2, 7.24.2.1, 7.24.2.2).

Одна из функций форматированного вывода обнаруживает спецификатор преобразования s, и в аргументе отсутствует нулевой ограничитель (если не указана точность, которая не требует нулевого завершения) (7.19.6.1, 7.24.2.1).

Спецификация преобразования n для одной из функций форматированного ввода/ вывода включает любые флаги, символ, подавляющий присвоение, ширину поля или точность (7.19.6.1, 7.19.6.2, 7.24.2.1, 7.24.2.2).

Одна из функций форматированного ввода / вывода использует спецификатор преобразования %, но полная спецификация преобразования - это не совсем %% (7.19.6.1, 7.19.6.2, 7.24.2.1, 7.24.2.2).

Обнаружена недопустимая спецификация преобразования в формате для одной из отформатированных функций ввода / вывода или функции strftime или wcsftime (7.19.6.1, 7.19.6.2, 7.23.3.5, 7.24.2.1, 7.24.2.2, 7.24.5.1).

Количество символов, передаваемых функцией форматированного вывода, больше, чем INT_MAX (7.19.6.1, 7.19.6.3, 7.19.6.8, 7.19.6.10).

Результат преобразования одной из функций форматированного ввода не может быть представлен в соответствующем объекте, или принимающий объект не имеет соответствующего типа (7.19.6.2, 7.24.2.2).

Одна из функций форматированного ввода обнаруживает спецификатор преобразования c, s или [, и массив, на который указывает соответствующий аргумент, недостаточно велик, чтобы принять входную последовательность (и нулевой ограничитель, если спецификатор преобразования равен s или [) (7.19.6.2, 7.24.2.2).

Одна из функций форматированного ввода обнаруживает c, s или [спецификатор преобразования с определителем l], но ввод не является допустимой последовательностью многобайтовых символов, которая начинается в начальном состоянии сдвига (7.19.6.2, 7.24.2.2).

Элемент ввода для преобразования %p одной из функций форматированного ввода не является значением, преобразованным ранее во время выполнения той же программы (7.19.6.2, 7.24.2.2).

Функция vfprintf, vfscanf, vprintf, vscanf, vsnprintf, vsprintf, vsscanf, vfwprintf, vfwscanf, vswprintf , vswscanf, vwprintf или vwscanf вызывается с неправильно инициализированным аргументом va_list, или этот аргумент используется (кроме как при вызове va_end) после возврата функции (7.19.6.8, 7.19.6.9, 7.19.6.10, 7.19.6.11, 7.19.6.12, 7.19.6.13, 7.19.6.14, 7.24.2.5, 7.24.2.6, 7.24.2.7, 7.24.2.8, 7.24.2.9, 7.24.2.10).

Содержимое массива, предоставленного при вызове функции fgets , gets или fgetws , используется после возникновения ошибки чтения (7.19.7.2, 7.19.7.7, 7.24.3.2).

Индикатор положения файла для двоичного потока используется после вызова функции ungetc , где его значение было равно нулю перед вызовом (7.19.7.11).

Индикатор положения файла для потока используется после возникновения ошибки во время вызова функции fread или fwrite (7.19.8.1, 7.19.8.2).

Используется частичный элемент, считываемый вызовом функции fread (7.19.8.1).

Функция fseek вызывается для текстового потока с ненулевым смещением, и либо смещение не было возвращено предыдущим успешным вызовом функции ftell в потоке, связанном с тем же файлом, либо откуда не задан SEEK_SET (7.19.9.2).

Функция fsetpos вызывается для установки позиции, которая не была возвращена предыдущим успешным вызовом функции fgetpos в потоке, связанном с тем же файлом (7.19.9.3).

Ненулевой указатель, возвращаемый вызовом функции calloc, malloc или realloc с нулевым запрашиваемым размером, используется для доступа к объекту (7.20.3).

Используется значение указателя, который ссылается на пространство, освобожденное вызовом функции free или realloc (7.20.3).

Аргумент указателя на функцию free или realloc не соответствует указателю, ранее возвращенному calloc , malloc или realloc , или пространство было освобождено вызовом функции free или realloc (7.20.3.2, 7.20.3.4).

Используется значение объекта, выделяемого функцией malloc (7.20.3.3).

Используются значения любых байтов в новом объекте, выделенных функцией realloc , превышающие размер старого объекта (7.20.3.4).

Программа выполняет более одного вызова функции exit (7.20.4.3).

Во время вызова функции, зарегистрированной с помощью функции atexit, выполняется вызов функции longjmp, которая завершает вызов зарегистрированной функции (7.20.4.3).

Строка , установленная функцией getenv или strerror , модифицируется программой (7.20.4.5, 7.21.6.2).

Команда выполняется через системную функцию способом, который задокументирован как вызывающий завершение работы или какую-либо другую форму неопределенного поведения (7.20.4.6).

Служебная функция поиска или сортировки вызывается с недопустимым аргументом указателя, даже если количество элементов равно нулю (7.20.5).

Функция сравнения, вызываемая служебной функцией поиска или сортировки, изменяет содержимое массива, в котором выполняется поиск или сортировка, или возвращает значения порядка непоследовательно (7.20.5).

Массив, в котором выполняется поиск с помощью функции bsearch , не имеет элементов в надлежащем порядке (7.20.5.1).

Текущее состояние преобразования используется функцией преобразования многобайтовых символов после изменения категории LC_CTYPE (7.20.7).

Служебной функции string или wide string дается указание обращаться к массиву за пределами конца объекта (7.21.1, 7.24.4).

Служебная функция string или wide string вызывается с недопустимым аргументом указателя, даже если длина равна нулю (7.21.1, 7.24.4).

Содержимое целевого массива используется после вызова функции strxfrm, strftime, wcsxfrm или wcsftime , в которой указанная длина была слишком мала, чтобы вместить весь результат с нулевым завершением (7.21.4.5, 7.23.3.5, 7.24.4.4.4, 7.24.5.1).

Первым аргументом в самом первом вызове strtok или wcstok является нулевой указатель (7.21.5.8, 7.24.4.5.7).

Тип аргумента макрокоманды общего типа несовместим с типом соответствующего параметра выбранной функции (7.22).

Комплексный аргумент предоставляется для универсального параметра макроса общего типа, который не имеет соответствующей комплексной функции (7.22).

Аргумент , соответствующий спецификатору s без спецификатора l в вызове функции fwprintf , не указывает на допустимую последовательность многобайтовых символов, которая начинается в начальном состоянии сдвига (7.24.2.11).

При вызове функции wcstok объект, на который указывает ptr , не имеет значения, сохраненного предыдущим вызовом для той же широкой строки (7.24.4.5.7).

Объект mbstate_t используется ненадлежащим образом (7.24.6).

Значение аргумента типа wint_t для функции широкой классификации символов или отображения регистра не равно значению WEOF и не может быть представлено в виде wchar_t (7.25.1).

Функция iswctype вызывается с использованием категории LC_CTYPE , отличной от действующей для вызова функции wctype, которая вернула описание (7.25.2.2.1).

Функция towctrans вызывается с использованием категории, отличной от категории LC_CTYPE , действующей для вызова функции wctrans, которая вернула описание (7.25.3.2.1).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment