结构体中的指针同时赋值NULL出错

#include<stdio.h>
typedef struct path{
struct path* begin;
struct path* end;

}PATH;
int main(){
PATH* path;
path->begin=NULL;
/* path->end=NULL;*/
printf("OK\n");

}
注释掉那一行后,正常执行;
加上注释掉的那一行后,编译没问题,但执行报错:
OK
segmenttation fault

;求解为何?
而下面这种{
......

int* p1=NULL;
int* p2=NULL;
......
}
能正确执行;
综上,我很困扰啊!!!

int* p1=NULL;
是定义一个指针变量,指向NULL。

PATH* path;
path->begin=NULL;
相当于 :
int* p1;
*p1 = 33333;
定义了一个指针,但是没有指向有效的内存(野指针),对指针进行写操作当然会出错。应该这样:
PATH path;
PATH *p = &path;
p->begin=NULL;
p->end=NULL;追问

你看下我问题,
PATH* path;
path->begin=NULL;
这样是不报错也能正确执行的;问题是再加上path->end=NULL;就出错了。你的回答跟我的问题没关系吧
==================================================================
你的方法可行,但是我困扰的是为何赋值一个的时候可以执行,两个都赋值就不能执行了

追答

这个取决于 path的值, 比如它刚好指到一个可写的区域,就两句都能执行,如果它指到可写区域的边缘,就只能执行一句。 但是,即使不报错,也绝对不能这样写,因为它改写了一个不确定的内存,会导致程序崩溃或者异常。

温馨提示:答案为网友推荐,仅供参考
相似回答