Почему использование указателя, как это приводит к сбою сборки? - PullRequest
0 голосов
/ 06 октября 2018

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

Screenshot

IDE: Code ::Блоки

ОС: Windows 8.1

#include <stdio.h>

int main(){
    int x;
    x = 6;
    int* p;
    *p = &x; // This is wrong

    printf("%d\n",*p);
}

1 Ответ

0 голосов
/ 06 октября 2018

Вам нужно изменить *p = &x;.Вместо этого используйте p = &x;.

Это сбой, потому что вы используете *p для неинициализированного указателя.Когда вы объявляете int* p;, значение инициализации p не определяется спецификациями C Language .Вы также пытаетесь присвоить адрес (&x) заполнителю int (*p, значение указано p).

Итак, при попытке отменить ссылку на p указав на следующее предложение, выполнив *p, вы, вероятно, пытаетесь получить доступ к области памяти, недоступной для вашего процесса.

p = &x; // you are pointing p to x variable memory location
printf("%d\n",*p); // should print 6
*p = 10;
printf("%d\n",*p); // should print 10
printf("%d\n",x);  // should also print 10
...