我有以下代码的分段错误,我真的不明白问题出在哪里......
int *p;
p[0]=1;
printf("%d\n",*p);
由于
答案 0 :(得分:7)
p
未初始化。 p[0]
(相当于*(p + 0)
,实际上是*p
)尝试取消引用它,由于p
中的不确定值导致行为未定义。
要使程序定义良好,您需要将其指向一些已分配的内存位置:
int i;
int* p = &i;
p[0] = 1;
printf("%d\n", *p);
答案 1 :(得分:2)
p
未初始化。您需要在解除引用之前先初始化它,否则会导致未定义的行为。
int *p; // p is pointing to a random location in memory
int a;
p = &a; // p is pointing to the variable a
p[0] = 1;
答案 2 :(得分:2)
int *p;
p
是一个未初始化的指针,可能指向任何未经授权的内存,并且使用以下语句,您倾向于写入一些无效的内存 -
p[0]=1;
您可以分配内存来执行此操作 -
int *p=malloc(sizeof(int));
if(p!=NULL){
p[0]=1;
printf("%d",p[0]);
}
free(p);