为什么使用这样的指针会破坏构建?

cha*_*uze -1 c crash pointers codeblocks

我正在深入研究C中的指针,但是当我写一个简单的代码来解决这个问题时.

截图

IDE:Code :: Blocks

操作系统:Windows 8.1

#include <stdio.h>

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

    printf("%d\n",*p);
}
Run Code Online (Sandbox Code Playgroud)

Pab*_*ruz 7

你需要改变*p = &x;.请p = &x;改用.

它正在崩溃,因为你正在使用*p未初始化的指针.声明时int* p;,C语言规范p未定义初始化值.您还尝试将地址()分配给占位符(指向的值).&xint*pp

因此,当您尝试通过执行取消引用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
Run Code Online (Sandbox Code Playgroud)