Ваша программа недействительна.C запрещает неявное удаление const
, как это, и в соответствии со спецификацией GCC должен дать вам хотя бы предупреждение для этого кода.Вам понадобится приведение, чтобы удалить const
.
Получив за это предупреждение, вы можете рассчитывать на то, что программа будет работать (хотя уже не с точки зрения стандартов), поскольку указатель указывает на область памяти, выделенную malloc.И вам разрешено писать в эту область.const T*
, указывающий на некоторую память, не означает, что память впоследствии помечается как неизменяемая.
Обратите внимание, что стандарт не требует, чтобы компилятор отклонял какую-либо программу.Стандарт просто требует, чтобы компиляторы иногда отправляли сообщение пользователю.Является ли это сообщением об ошибке или предупреждением и как сообщение отправляется, и что бы ни происходило после этого излучения, Стандарт вообще не определен.