#include <string.h> void *_debug_memset(void *dest, int c, size_t count, const char *file, size_t line);
This is the debug version of memset. Like memset, it sets the first count bytes of dest to the value c. The value of c is converted to an unsigned character.
_debug_memset validates the heap after setting the bytes, and performs this check only when the target is within a heap. _debug_memset makes an implicit call to _heap_check. If _debug_memset detects a corrupted heap when it makes a call to _heap_check, _debug_memset reports the file name file and line number line in a message.
Returns a pointer to dest.
This example contains a programming error. The invocation of memset that puts 'B' in the buffer specifies the wrong count, and stores bytes past the end of the buffer.
/* _debug_memset.c */ #include <stdlib.h> #include <string.h> #include <stdio.h> #define BUF_SIZE 20 int main(void) { char *buffer, *buffer2; char *string; buffer = (char*)calloc(1, BUF_SIZE+1); /* +1 for null-terminator */ string = (char*)memset(buffer, 'A', 10); printf("\nBuffer contents: %s\n", string); memset(buffer+10, 'B', 20); return 0; }
Buffer contents: AAAAAAAAAA End of allocated object 0x00073c80 was overwritten at 0x00073c95. The first eight bytes of the memory block (in hex) are: 4141414141414141. This memory block was (re)allocated at line number 12 in _debug_memset.c. Heap state was valid at line 14 of _debug_memset.c. Memory error detected at line 16 of _debug_memset.c.