1) Dump memory at 0x18E800 and figure out what memory block is that in your program. Most likely reason is you allocated a block, and use it for more than the allocated size. If the program is big, it's hard to figure out.
2) Use gflags.exe tool to turn on page heap for your process and run your code again. It can catch heap corruption much earier. Search for gflags and page heap.
3) Add more heap vadidation calls to your code. If you use C++ runtime library, use _CrtCheckMemory first. If you only use Win32 heap allocation, use HeapValidate.
4) Search for Microsoft PreFast tool.
Feng Yuan [MSFT] (www.fengyuan.com, blog.joycode.com/fyuan)