There are a variety of other techniques you can employ to ensure that your code is as robust as possible. One of the most important tasks is to ensure that you are allocating and freeing memory safely. In addition, you want to enlist the compiler's help to find bugs — bugs detected at compile time are far less expensive to correct than those found at run-time. Compile-time bugs will fail reliably at every compile; run-time bugs can be far more elusive.