带有c指针的分段错误

时间:2015-12-28 14:19:26

标签: c pointers segmentation-fault

我有以下代码的分段错误,我真的不明白问题出在哪里......

int *p;
p[0]=1;
printf("%d\n",*p);

由于

3 个答案:

答案 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);