V743. The memory areas must not overlap. Use 'memmove' function.

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.


Bugs Found

Checked Projects
414
Collected Errors
14 218
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site. Learn More →
Accept