That is what I have been doing since forever, in C and C++ land.
In C++, I kind of always strived to use the higher level abstractions, with support for bounds checking. First the compiler provided frameworks from pre-C++98, then configuring builds so that STL types also bounds check in release.
In C is harder, but a mix of asserts, using TU as if they were modules exposing ADTs (Modula-2/Pascal units style), can also be a way to help mitigate issues. Kudos to the Code Complete book for some of the ideas[0].
However, trying to sell this experience always feels like quixotic in those environments, so kudos for actually doing it.
[0] - "Code Complete. A Practical Handbook of Software Construction"