Honestly, this is may be a dupe of VS2015: Migrated project compiles, but won't run ("Debug Assertion Failed!") but that has no answer and I have more details.
I had the exact same problem. At least in my case, the problem was the /NOENTRY switch in "Additional Options" in the linker switches. This is only visible when "All Options" is selected in the linker settings. Removing /NOENTRY also removed the problem.
My original (2013) project file did have this switch; however, the 2013 build did work. So either that switch was ignored in 2013, or the whole linking process has changed. (which from the looks i assume it has quite a bit.)
Is it possible that you are mixing up debug and release code? ucrtbased.dll is the debug universal CRT DLL. Windows maintains different heaps for debug versus release and mixing them can definitely cause errors like these. The different C runtime DLL's (e.g., VS2010, 2012, 2015) also maintain different heaps. Allocating memory on one heap and deallocating on another will cause these types of errors too.
See http://www.qtcentre.org/threads/29475-HEAP-VariousTests-exe-Invalid-Address-specified-to-RtlValidateHeap for example.