The analyzer detected an error that has to do with using function memcpy when dealing with overlapping source and destination memory blocks, in which case the behavior is undefined [1, 2].
Consider the following example:
void func(int *x){
memcpy(x, x+2, 10 * sizeof(int));
}
In this case, the source pointer (x+2) is offset from the destination by 8 bytes (sizeof(int) * 2). Copying 40 bytes from the source into the destination will lead to partial overlapping of the source memory block.
To fix this error, one should use a special function, memmove(...), or revise the offset between the source and destination blocks to avoid their overlapping.
Example of correct code:
void func(int *x){
memmove(x, x+2, 10 * sizeof(int));
}
References:
This diagnostic is classified as:
|
You can look at examples of errors detected by the V743 diagnostic. |