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

Posted

技术标签:

【中文标题】向结构成员添加值时出现结构分段错误【英文标题】:Struct segmentation fault when adding values to struct members 【发布时间】:2021-02-19 17:54:57 【问题描述】:

我在new_session->sid = sid; 遇到分段错误。不知道为什么。

伪会话列表.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;


【问题讨论】:

请贴出真实代码。 “Pseudo .c”在询问分段错误时没有用。 您将要查看:Is it a good idea to typedef pointers?。 @dxiv get_session_1_svc 通过 RPC 从客户端调用到服务器。客户端将其用户名作为 char* 发送到方法 get_session1_svc。这就是我改变的一切。以及 insert_Session 位于不同的 .c 文件中,并且 .h 包含在 get_session_1_svc 所在的服务器文件中。 【参考方案1】:

嗯,难怪你是。这一行:

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

完全无效。您强制转换为 session 的事实隐藏了错误,但您基本上是在为指针分配任意数字。

我怀疑你实际上想要分配内存。在这种情况下,您将执行以下操作:

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

【讨论】:

以上是关于向结构成员添加值时出现结构分段错误的主要内容,如果未能解决你的问题,请参考以下文章

发送具有 std::vector 成员的结构时出现分段错误

删除时出现分段错误

访问结构时出现分段错误

为啥在尝试使用指针访问结构时出现此分段错误?

访问填充了从管道读取的数据的结构时出现分段错误

删除以结构为键的地图时出现分段错误