向结构成员添加值时发生结构分段错误

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));