В свое время у нас не было защиты памяти и всего этого шикарного бизнеса! Мы использовали printf, чтобы определить, где мы были в программе, и нам понравилось !
Хотя со всей серьезностью, это обычно означало, что мы были более осторожны. Там, где вызывается malloc, должна была быть свободна где-то еще в программе, и такая проверка была строгой, потому что в случае проблемы, как вы ясно указали, ошибки сегментации не являются полезными ошибками.
В случае таких ошибок лучшее, что вы можете сделать, это попытаться понять, когда происходят такие ошибки сегментации (используя printf), и, взглянув на код, определить, почему доступ к памяти в этой точке был недействительным, и работать в обратном направлении оттуда.
По сути, сегодня происходит то же самое, за исключением того, что мы используем отладчики, чтобы определить, когда происходят ошибки, но вам все равно нужно понять, почему это произошло, и это не всегда так просто, как найти строку, в которой произошла ошибка. Ошибки приводят к ошибкам, таким как цепная реакция, и если вы были программистом на C в те дни, вы потратили 20% своего времени на кодирование, а остальное время вырывали свои волосы, исправляя ошибки.