I write C on a non-valgrind capable platform. It's literally scary what you missed when you take what you think is working properly and throw it through valgrind.
I paid severe penalties for memory corruption bugs writing C code in the 80's - penalties in the form of vast time spent debugging in a non-memory protected environment, where a crash could and often would scramble your hard disk.
As a result, I developed a lot of defensive habits to ward off these types of problems, such that I don't make those mistakes very often anymore. But once in a while, I still get weird errors, and the first thing I try is running it under valgrind.
Bing, bang, problem found, fixed. I may be not too far off the mark in saying that valgrind may have saved C and C++.