It could be heap corruption (explaining why malloc terminates the process).
Use your regular tooling to detect undefined behaviour (such as bad memory accesses).
If it's exception handling gone awry (not too unusual in the presence of ABI stressors like cross-compilation), you might use nothrow
version of operator new
:
X* x = new (nothrow) X;
assert(x); // or otherwise handle with care