Start here

Home
About Klocwork
What's new
Fixed issues
Release notes
Installation

Reference

C/C++ checkers
Java checkers
C# checkers
MISRA C 2004 checkers
MISRA C++ 2008 checkers
MISRA C 2012 checkers
MISRA C 2012 checkers with Amendment 1
Commands
Metrics
Troubleshooting
Reference

Product components

C/C++ Integration build analysis
Java Integration build analysis
Desktop analysis
Refactoring
Klocwork Static Code Analysis
Klocwork Code Review
Structure101
Tuning
Custom checkers

Coding environments

Visual Studio
Eclipse for C/C++
Eclipse for Java
IntelliJ IDEA
Other

Administration

Project configuration
Build configuration
Administration
Analysis performance
Server performance
Security/permissions
Licensing
Klocwork Static Code Analysis Web API
Klocwork Code Review Web API

Community

View help online
Visit RogueWave.com
Klocwork Support
Rogue Wave Videos

Legal

Legal information

MISRA.STDLIB.INCOMPAT_ARGS.2012_AMD1

The pointer arguments to memcpy, memmove, or memcmp are not pointers to compatible types

MISRA C 2012 Rule 21.15: The pointer arguments to the Standard Library functions memcpy, memmove and memcmp shall be pointers to qualified or unqualified versions of compatible types

Category: Required

Analysis: Decidable, Single Translation Unit

Applies to: C90, C99

Rationale

The Standard Library functions
void * memcpy   ( void * restrict s1, const void * restrict s2, size_t n );
void * memmove  ( void *s1, const void *s2, size_t n );
 int   memcmp   ( const void *s1, const void *s2, size_t n );

perform a byte by byte copy, move or comparison of the first n bytes of the two objects pointed at by s1 and s2.

An attempt to call one of these functions with arguments which are pointers to different types may indicate a mistake.

Example

/*
 * Is it intentional to only copy part of 's2'?
 */
void f ( uint8_t s1[ 8 ], uint16_t s2[ 8 ] )
{
  ( void ) memcpy ( s1, s2, 8 );    /* Non-compliant */
}