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 |