结构体中的指针同时赋值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的赋值方式将报错,而后者则可以通过
所以作者的用意应该是:就算不知道所需函数的返回类型,也可以正确实现调用
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯