The error is from a native DLL, which is either flawed or misused. To find out which one, you can use Process Explorer to examine the stack traces of your app's threads when the message is popped. The DLL will be around the top of the stack (the messagebox stuff will be above it). You won't see the root of the corruption, though - the error is detected when memory is freed.
You might be able to disable the message using one of these options, but you'll only be hiding the problem. If your heap gets corrupted, your data might get corrupted as well.
BTW, AFAIK, these messages only appear on debug builds, which means the native DLL is in debug build. If it's some third party's, it would be weird. If it's yours, you can just attach a debugger to the process, and it will break when the message is popped. You still don't get the root of the error, but you'll have a better picture of the context.