Нет, такая концепция области памяти, доступной только для чтения, вообще не существует в C. C Программисты остаются самостоятельно при выделении / доступе / манипулировании памятью, и они должны знать, что они делают:Такова ответственность, которая исходит от необработанной власти: D.
Если вы можете переключиться на C ++, тогда вы можете рассмотреть возможность использования std :: vector.Хотя переполнение буфера все еще возможно при использовании std :: vectors, они менее вероятны при использовании методов, содержащихся в интерфейсе класса.Этот метод абстрагирует доступ к элементам и их вставку, поэтому вам не нужно явно управлять памятью.Обратите внимание, что вы все равно можете получить прямой доступ к элементу, который находится за пределами векторного размера, если вы не используете итераторы.
Поскольку переполнения - это повторяющиеся проблемы в c / c ++, существует несколько инструментов, которые помогают программисту справляться с подобными ошибками.Инструменты варьируются от статического анализатора языка до обнаружения во время выполнения незащищенного доступа к памяти в режиме отладки.