Неправильно выровненные или недопустимые результаты преобразований между типами указателей и целочисленными типами
Этот дефект происходит, когда вы преобразуете между типом указателя, таким как intptr_t
, или uintprt_t
, и целочисленный тип, такой как enum
, ptrdiff_t
, или pid_t
, или наоборот.
Отображение между указателями и целыми числами не всегда сопоставимо со структурой обращения среды.
Преобразование от указателей до целых чисел может создать:
Усеченный или из целочисленных значений области значений.
Недопустимые целочисленные типы.
Преобразование от целых чисел до указателей может создать:
Неправильно выровненные указатели или неправильно выровненные объекты.
Адреса недопустимого указателя.
Где возможно, избегайте преобразования целого числа к указателю или указатель на целое число. Если вы хотите преобразовать void
указатель на целое число, так, чтобы вы не изменяли значение, использует типы:
C99 — intptr_t
или uintptr_t
C90 — size_t
или ssize_t
Группа: Программирование |
Язык: C | C++ |
Значение по умолчанию: Off |
Синтаксис командной строки: BAD_INT_PTR_CAST |
Удар: Средняя |
ID CWE: 465, 466, 587, 758 |