永发信息网

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

答案:2  悬赏:80  手机版
解决时间 2021-02-23 06:21
  • 提问者网友:难遇难求
  • 2021-02-23 02:14
#include
typedef struct path{
struct path* begin;
struct path* end;

}PATH;
int main(){
PATH* path;
path->begin=NULL;

printf("OK\n");

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

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

int* p1=NULL;
int* p2=NULL;
......
}
能正确执行;
综上,我很困扰啊!!!
最佳答案
  • 五星知识达人网友:酒安江南
  • 2021-02-23 02:44
int* p1=NULL;
是定义一个指针变量,指向NULL。

PATH* path;
path->begin=NULL;
相当于 :
int* p1;
*p1 = 33333;
定义了一个指针,但是没有指向有效的内存(野指针),对指针进行写操作当然会出错。应该这样:
PATH path;
PATH *p = &path;
p->begin=NULL;
p->end=NULL;
全部回答
  • 1楼网友:轻雾山林
  • 2021-02-23 03:04
好问题~~ *(void **)&william.sheild= belle 是先取william.sheild的地址,然后强制转为指向指针的指针,然后再对其赋值 经过调试发现: *(void **)&william.sheild = belle;这种方式更为鲁棒 可以试试将void(* sheild)(void);声明为不同类型。比如int(* sheild)(void); tag1的赋值方式将报错,而后者则可以通过 所以作者的用意应该是:就算不知道所需函数的返回类型,也可以正确实现调用
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯