У вас уже есть answer от Mr. Iharob за ваш вопрос, просто чтобы немного рассказать, хотя я добавил свой.
В своем вопросе вы упомянули, как
... когда int
переменная инициализируется
Это утверждение неверно. Нет проблемы с int
инициализациями переменных (i = 0
, j = 0
и b = 4
). Проблема здесь связана с неправильным использованием x
.
В вашем коде x
имеет тип char *
, то есть является указателем на char
. Теперь, говоря
*(x + j) = <some value>
вы пытается присвоить значение для char
что x
(или, скорее x + j
, в целом) указывает на. Хорошо, но подождите, подождите, что делает x
(или, x + j
) на самом деле указывают на настоящее время?
Ответ: x
сам не инициализирован явно, поэтому он не указывает на допустимую память, где вы можете записать значение. Стандарты указывают, пытаясь прочитать или записать в неинициализированную ячейку памяти, вызывает undefined behaviour. Ошибка сегментации является одним из побочных эффектов UB.
Чтобы избежать, необходимо выделить память для x
первой (так, что он указывает на правильное местоположение памяти), а затем поместить значение в ячейку памяти, оно указывает на . Вы можете использовать malloc()
и семейство функций, чтобы получить выделение памяти.
Честный вопрос? Почему такие вопросы занижены? – woodstok