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++ |
По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки: PTR_SIZEOF_MISMATCH |
Влияние: Высокий |
ИДЕНТИФИКАТОР CWE: 467 |