Когда-то писал утилиту, которая ограничивала процессы по времени и памяти. Использовал системный вызов setrlimit. С его помощью, видимо, можно добиться того, что вам нужно.
Ошибку не найдёшь. Рандомно фейлящийся маллок ничего не поможет найти. Ну то есть поможет, но не всё. Тогда уж лучше маллок, начинающий возвращать нули после рандомного момента. Но с ulimit проще и симуляция тонее.
рандомно фейлящий маллок надо на стресс-тестировании запускать. А так надо чтобы везде где есть malloc он хотя бы раз сбойнул. А лучше все возможные комбинации покрыть. LD_PRELOAD тут ни при чём, это просто механизм подмены malloc своей функцией.