简体   繁体   English

向结构成员添加值时出现结构分段错误

[英]Struct segmentation fault when adding values to struct members

I'm getting a segmentation fault at new_session->sid = sid;我在new_session->sid = sid;new_session->sid = sid;分段错误new_session->sid = sid; . . Can't figure out why.想不通为什么。

pseudo sessions_list.h伪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);

Pseudo .c to explain the problem:伪.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;
}

Well, no wonder you are.好吧,难怪你是。 This line:这一行:

session new_session = (session) (sizeof(struct session_list));

Is completely invalid.是完全无效的。 The fact that you are forcibly casting to session hides the error, but you are basically assigning an arbitrary number to a pointer.您强行转换为session的事实隐藏了错误,但您基本上是为指针分配了一个任意数字。

I suspect that you actually want to allocate memory .我怀疑你真的想分配内存 In such case, you would do the following:在这种情况下,您将执行以下操作:

session new_session = malloc(sizeof(struct session_list));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM