在C linux中,scanf获取给出seg错误的struct元素的值
我的scanf声明是seg的错。你能告诉我为什么吗在C linux中,scanf获取给出seg错误的struct元素的值,c,linux,structure,C,Linux,Structure,我的scanf声明是seg的错。你能告诉我为什么吗 typedef struct message1 { int call_id1; int lac; long int attribute; int conn_id; struct message1 *next1; }M1; M1 *last=NULL; main() { printf("\nEnter Call Id\t"); scanf("%d",&last->call_id
typedef struct message1
{
int call_id1;
int lac;
long int attribute;
int conn_id;
struct message1 *next1;
}M1;
M1 *last=NULL;
main()
{
printf("\nEnter Call Id\t");
scanf("%d",&last->call_id1);
}
显然。。。未将其初始化为正确的值:
M1 *last=NULL;
应该是
M1 *last= (M1*)malloc(sizeof(M1));
显然。。。未将其初始化为正确的值:
M1 *last=NULL;
应该是
M1 *last= (M1*)malloc(sizeof(M1));
您尚未为struct
M1
分配内存,并试图访问其内存内容,这是分段错误的原因
动态分配内存为,
M1*last=malloc(sizeof(M1))代码>您尚未为structM1
分配内存,并试图访问其内存内容,这是分段错误的原因
动态分配内存为,M1*last=malloc(sizeof(M1))代码>您试图读取未分配内存的结构
加
M1*last=malloc(sizeof(struct message1));//在全球空间
或
last=malloc(sizeof(struct message1));//主要功能
您正在尝试读取未分配内存的结构
加
M1*last=malloc(sizeof(struct message1));//在全球空间
或
last=malloc(sizeof(struct message1));//主要功能
因为您用NULL初始化了结构指针
M1 last;
够了
不需要给出任何指针。如果希望将其作为指针,则使用malloc
M1 *last;
last = malloc(sizeof(M1));
因为您用NULL初始化了结构指针
M1 last;
够了
不需要给出任何指针。如果希望将其作为指针,则使用malloc
M1 *last;
last = malloc(sizeof(M1));
实际区域不安全。@BLUEPIXY您能解释一下您的答案并告诉我上述问题的替代方案吗?您认为这是什么(NULL)->call_id1
@Arjun Sreedharan&
不是用于last
,而是用于last->call_id1
需要&
的地方。小调:考虑到答案中分配内存的各种风格,建议使用M1*last=malloc(sizeof*last)的风格代码>最容易编写、维护和理解。实际区域不安全。@BLUEPIXY您能解释一下您的答案并告诉我上述问题的替代方案吗?您认为这是什么(NULL)->call_id1
@Arjun Sreedharan&
不是用于last
,而是用于last->call_id1
需要&
的地方。小调:考虑到答案中分配内存的各种风格,建议使用M1*last=malloc(sizeof*last)的风格代码>最容易编写、维护和理解。耶!!thanx。。这就是问题所在。是的!!thanx。。这就是问题所在。您也需要&
。创建结构时,成员将有自己的地址,您希望读入该地址,而不是解释为成员指向的地址的随机值!对不起,但是scanf(“%d”,&last->call\u id1)代码>正确。@fritzone是。谢谢编辑您也需要和。创建结构时,成员将有自己的地址,您希望读入该地址,而不是解释为成员指向的地址的随机值!对不起,但是scanf(“%d”,&last->call\u id1)代码>正确。@fritzone是。谢谢编辑