Первый вопрос, который возникает а как вообще можно говорить о безопасности, в языке, который предоставляет широкие возможности для небезопасного программирования с использованием операций адресации, типов данных указателей, и отсутствием стандартных библиотек.
Ответ: никак
Способ номер 1.
Писать как обычно, используя статические анализаторы (Java VM based, CMake/Clang LLVM based), и анализаторы утечек памяти, типа valgrind, или sanitizers для обнаружения утечек памяти, плюс какое-то количество ручного кода для тестирования
Способ номер 2.
Попробовать написать обёртку над операциям работы с памятью напрямую, предоставить API с безопасными операциями, и запретить пользователям обращаться к памяти через указатели.
Второй способ подразумевает, что у вас где-то должно происходить преобразование безопасных типов данных , заменяющих небезопасные при операциях, выполняемых через ваш API.
Тут тоже требуется определенный подход и аккуратность при проверке входящих/исходящих параметров вызово функций. И это всё, что имеется по умолчанию.