向结构成员添加值时出现结构分段错误
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));
【讨论】:
以上是关于向结构成员添加值时出现结构分段错误的主要内容,如果未能解决你的问题,请参考以下文章