Почему при выполнении этой базовой программы выдается ошибка? - PullRequest
0 голосов
/ 12 февраля 2019

Я не очень понимаю, почему при выполнении этой программы выдается ошибка?

  int main()
  {
        char *b;
        *b='2';
        printf("%c",*b);
        return 0;
  }

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Похоже, это взято прямо из домашней работы или учебника.Когда вы объявляете указатель на символ b, ему по умолчанию не присваивается адрес памяти (на который он указывает), он просто содержит все, что было в ячейке памяти заранее.Это означает, что если вы попытаетесь работать со значением (* b = '2' или printf), он попытается прочитать эту случайную информацию, оставшуюся в памяти, как адрес и найти символ по этому адресу.Это может привести к ошибке сегментации или, если вам не повезет, он будет извлекать мусор из памяти и использовать его в качестве значения char.

Решением будет создание переменной char (char a) и установкауказатель на местоположение a (b = & a).

Надеюсь, это поможет, и удачи в учебе.

0 голосов
/ 12 февраля 2019

В его нынешнем виде b неинициализирован и может указывать на любое произвольное местоположение.Когда вы говорите *b =..., вы пытаетесь записать в неуказанное местоположение, которое (в зависимости от того, что это за местоположение) часто вызывает ошибку (скажем, segfault).Возможно, вы хотели объявить b как char вместо указателя на единицу?

...