# Wasm memcheck (wmemcheck) wmemcheck provides the ability to check for invalid mallocs, reads, and writes inside a Wasm module, as long as Wasmtime is able to make certain assumptions (`malloc` and `free` functions are visible and your program uses only the default allocator). This is analogous to the Valgrind tool's memory checker (memcheck) tool for native programs. How to use: 1. When building Wasmtime, add the CLI flag "--features wmemcheck" to compile with wmemcheck configured. > cargo build --features wmemcheck 2. When running your wasm module, add the CLI flag "-W wmemcheck". > wasmtime run -W wmemcheck test.wasm If your program executes an invalid operation (load or store to non-allocated address, double-free, or an internal error in malloc that allocates the same memory twice) you will see an error that looks like a Wasm trap. For example, given the program ```c #include int main() { char* p = malloc(1024); *p = 0; free(p); *p = 0; } ``` compiled with WASI-SDK via ```plain $ /opt/wasi-sdk/bin/clang -o test.wasm test.c ``` you can observe the memory checker working like so: ```plain $ wasmtime run -W wmemcheck ./test.wasm Error: failed to run main module `./test.wasm` Caused by: 0: failed to invoke command default 1: error while executing at wasm backtrace: 0: 0x103 - !__original_main 1: 0x87 - !_start 2: 0x2449 - !_start.command_export 2: Invalid store at addr 0x10610 of size 1 ```