Аргумент sizeof не совпадает с указанным типом
Неправильно введите используемый в 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 |