sizeof
аргумент не совпадает с указанным типом
Этот дефект происходит, когда оба из следующих условий содержат:
Вы присваиваете адрес блока памяти указателю или передаете данные между двумя блоками памяти. Присвоение или копия используют sizeof
оператор.
Например, вы инициализируете указатель с помощью malloc (sizeof (
или скопируйте данные между двумя адресами с помощью type
))memcpy (
.destination_ptr
, source_ptr
, sizeof (type
))
Вы используете неправильный тип в качестве аргумента sizeof
оператор. Вы используете тип указателя вместо типа, на который указывает указатель.
Например, чтобы инициализировать
указатель, вы используете type
*malloc (sizeof (
вместо type
*))malloc (sizeof (
.type
))
Независимо от какой type
обозначает, выражение sizeof (
всегда возвращает фиксированный размер. Возвращенный размер является размером указателя на вашей платформе в байтах. Внешний вид type
*)sizeof (
часто указывает на непреднамеренное использование. Ошибка может вызвать выделение блока памяти, который намного меньше, чем, в чем вы нуждаетесь и приводите к слабым местам, таким как переполнение буфера.type*
)
Например, примите тот structType
структура с десятью int
переменные. Если вы инициализируете structType*
указатель с помощью malloc(sizeof(structType*))
на 32-битной платформе указатель присвоен блок памяти четырех байтов. Однако быть выделенным полностью для одного structType
переменная, structType*
указатель должен указать на блок памяти sizeof(structType) = 10 * sizeof(int)
байты. Необходимый размер очень больше фактического выделенного размера четырех байтов.
Инициализировать
указатель, замена type
*sizeof (
в выражении инициализации указателя с type
*)sizeof (
.type
)
Группа: Программирование |
Язык: C | C++ |
Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода |
Синтаксис командной строки: PTR_SIZEOF_MISMATCH |
Удар: высоко |
ID CWE: 467 |