gpt4 book ai didi

c - 当我创建并向结构添加值时发生了一些事情,导致了段错误

转载 作者:行者123 更新时间:2023-11-30 15:09:06 25 4
gpt4 key购买 nike

所以我对我的 RPC 程序做了一些更新,现在它出现了段错误,我不确定我在这里做错了什么。两者之间的区别在于删除了为 args 结构赋值的 if 语句。

段错误

void
database_1(char *host, char *action, char *message)
{
printf("Action: %s\n", action);
printf("Message: %s\n", message);
CLIENT *clnt;
rpc_args *result_1;
//struct rpc_args action_1_arg;

//rpc arguments struct to pass to server
struct rpc_args *args = malloc(sizeof(struct rpc_args));

char *id = generate_id();
if (strcmp(action, "GET") == 0) {
strcpy(args->action, action);
strcpy(args->id, id);
} else if(strcmp(action, "PUT") == 0) {
strcpy(args->action, action);
strcpy(args->id, id);
strcpy(args->message.content, message);
}

#ifndef DEBUG
clnt = clnt_create (host, DATABASE, ASSIGNMENT_7, "udp");
if (clnt == NULL) {
clnt_pcreateerror (host);
exit (1);
}
#endif /* DEBUG */

result_1 = action_1(args, clnt);
if (result_1 == (rpc_args *) NULL) {
clnt_perror (clnt, "call failed");
}
#ifndef DEBUG
free(args);
clnt_destroy (clnt);
#endif /* DEBUG */
}

没有段错误

void
database_1(char *host, char *action, char *message)
{
printf("Action: %s\n", action);
printf("Message: %s\n", message);
CLIENT *clnt;
rpc_args *result_1;
//struct rpc_args action_1_arg;

//rpc arguments struct to pass to server
struct rpc_args *args = malloc(sizeof(struct rpc_args));

char *id = generate_id();

#ifndef DEBUG
clnt = clnt_create (host, DATABASE, ASSIGNMENT_7, "udp");
if (clnt == NULL) {
clnt_pcreateerror (host);
exit (1);
}
#endif /* DEBUG */

result_1 = action_1(args, clnt);
if (result_1 == (rpc_args *) NULL) {
clnt_perror (clnt, "call failed");
}
#ifndef DEBUG
free(args);
clnt_destroy (clnt);
#endif /* DEBUG */
}

最佳答案

您没有向我们展示struct的定义,但请确保它看起来像这样:

#define MAX_STRING_SIZE 128

struct rpc_args {
/* other members here */
char action[MAX_STRING_SIZE];
char id[MAX_STRING_SIZE];
};

同样,args->message.content中使用的struct也必须以这种方式定义。

如果您使用类似上述实现的方法,请确保检查要复制的字符串的长度是否小于 MAX_STRING_SIZE - 1

或者,在对这些成员使用 strcpy 之前,您可以使用 malloc 为字符串动态分配空间,然后在清理时释放它们上层结构。

关于c - 当我创建并向结构添加值时发生了一些事情,导致了段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36876673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com