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 |
| Воздействие: Высокое |
| CWE ID: 467 |