Valgrind (and memcheck) have a C API!
You can simply do this:
#include <memcheck.h>
// ....
VALGRIND_MAKE_MEM_UNDEFINED(trash_buffer, trash_length);
You could also use VALGRIND_MAKE_MEM_NOACCESS
if you want valgrind to consider the data to be inaccessible instead of just unitialized.
This will have very little runtime overhead when running outside of valgrind. Your approach of copying stuff around could be expensive, even when not running inside valgrind.