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
sizeof
operator.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
sizeof
operator. 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
sizeof
argument. For example, to initialize a
pointer, 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)