Wrong type used in sizeof
sizeof argument does not match pointed
type
Description
This defect occurs when both of the following conditions hold:
You assign the address of a block of memory to a pointer, or transfer data between two blocks of memory. The assignment or copy uses the
sizeofoperator.For instance, you initialize a pointer using
malloc(sizeof(or copy data between two addresses usingtype))memcpy(.destination_ptr,source_ptr, sizeof(type))You use an incorrect type as argument of the
sizeofoperator. For instance:You might be using the pointer type instead of the type that the pointer points to. For example, to initialize a
pointer, you might be usingtype*malloc(sizeof(instead oftype*))malloc(sizeof(.type))You might be using a completely unrelated type as
sizeofargument. For example, to initialize apointer, you might be usingtype*malloc(sizeof(.anotherType))
Risk
Irrespective of what type stands
for, the expression sizeof( always
returns a fixed size. The size returned is the pointer size on your
platform in bytes. The appearance of type*)sizeof( often
indicates an unintended usage. The error can cause allocation of a
memory block that is much smaller than what you need and lead to weaknesses
such as buffer overflows.type*)
For instance, assume that structType is a
structure with ten int variables. If you initialize
a structType* pointer using malloc(sizeof(structType*)) on
a 32-bit platform, the pointer is assigned a memory block of four
bytes. However, to be allocated completely for one structType variable,
the structType* pointer must point to a memory
block of sizeof(structType) = 10 * sizeof(int) bytes.
The required size is much greater than the actual allocated size of
four bytes.
Fix
To initialize a pointer,
replace type*sizeof( in
your pointer initialization expression with type*)sizeof(.type)
Examples
Result Information
| Group: Programming |
| Language: C | C++ |
| Default: On for handwritten code, off for generated code |
Command-Line Syntax: PTR_SIZEOF_MISMATCH |
| Impact: High |
Version History
Introduced in R2013bSee Also
Topics
- Interpret Bug Finder Results in Polyspace Desktop User Interface
- Interpret Bug Finder Results in Polyspace Access Web Interface (Polyspace Access)
- Address Results in Polyspace User Interface Through Bug Fixes or Justifications
- Address Results in Polyspace Access Through Bug Fixes or Justifications (Polyspace Access)