#include <string.h> void *_debug_memcpy(void *dest, const void *src, size_t count, const char *file, size_t line);
This is the debug version of memcpy. Like memcpy, it copies count bytes of src to dest, where the behavior is undefined if copying takes place between objects that overlap.
_debug_memcpy validates the heap after copying the bytes to the target location, and performs this check only when the target is within a heap. _debug_memcpy makes an implicit call to _heap_check. If _debug_memcpy detects a corrupted heap when it makes a call to _heap_check, _debug_memcpy reports the file name file and line number line in a message.
Returns a pointer to dest.
This example contains a programming error. On the call to memcpy used to initialize the target location, the count is more than the size of the target object, and the memcpy operation copies bytes past the end of the allocated object.
/* _debug_memcpy.c */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define MAX_LEN 10
int main(void)
{
char *source, *target;
target = (char*)malloc(MAX_LEN);
memcpy(target, "This is the target string", 11);
printf("Target is \"%s\"\n", target);
return 0;
}
The output is similar to:
End of allocated object 0x00073c80 was overwritten at 0x00073c8a. The first eight bytes of the memory block (in hex) are: 5468697320697320. This memory block was (re)allocated at line number 11 in _debug_memcpy.c. Heap state was valid at line 11 of _debug_memcpy.c. Memory error detected at line 12 of _debug_memcpy.c.