向结构成员添加值时发生结构分段错误
Struct segmentation fault when adding values to struct members
我在 new_session->sid = sid;
遇到分段错误。想不通为什么。
伪sessions_list.h
typedef char *user;
typedef int sessionid;
struct session_list {
sessionid sid;
user user;
struct session_list *next;
};
typedef struct session_list *session;
session insert_session(session, sessionid, user);
session search_session(session, sessionid);
session delete_session(session, sessionid);
void show_session_list(session);
伪.c说明问题:
session sessions;
main(){
get_session_1_svc("this user");
}
extern sessionid * get_session_1_svc(user * usr){
static sessionid sid = 0;
sid = clock();
insert_session(sessions,sid,*usr);
return &sid;
}
session insert_session(session session_list,sessionid sid, user user){
session new_session = (session) (sizeof(struct session_list));
new_session->sid = sid;
new_session->user = user;
new_session->next = session_list->next;
session_list->next = new_session;
return new_session;
}
嗯,难怪你是。这一行:
session new_session = (session) (sizeof(struct session_list));
完全无效。您强行转换为 session
的事实隐藏了错误,但您基本上是在为指针分配任意数字。
我怀疑你真的想要分配内存。在这种情况下,您将执行以下操作:
session new_session = malloc(sizeof(struct session_list));
我在 new_session->sid = sid;
遇到分段错误。想不通为什么。
伪sessions_list.h
typedef char *user;
typedef int sessionid;
struct session_list {
sessionid sid;
user user;
struct session_list *next;
};
typedef struct session_list *session;
session insert_session(session, sessionid, user);
session search_session(session, sessionid);
session delete_session(session, sessionid);
void show_session_list(session);
伪.c说明问题:
session sessions;
main(){
get_session_1_svc("this user");
}
extern sessionid * get_session_1_svc(user * usr){
static sessionid sid = 0;
sid = clock();
insert_session(sessions,sid,*usr);
return &sid;
}
session insert_session(session session_list,sessionid sid, user user){
session new_session = (session) (sizeof(struct session_list));
new_session->sid = sid;
new_session->user = user;
new_session->next = session_list->next;
session_list->next = new_session;
return new_session;
}
嗯,难怪你是。这一行:
session new_session = (session) (sizeof(struct session_list));
完全无效。您强行转换为 session
的事实隐藏了错误,但您基本上是在为指针分配任意数字。
我怀疑你真的想要分配内存。在这种情况下,您将执行以下操作:
session new_session = malloc(sizeof(struct session_list));