首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我在结构中创建和添加值时发生了一些事情,这导致了一个分段错误。

当我在结构中创建和添加值时发生了一些事情,这导致了一个分段错误。
EN

Stack Overflow用户
提问于 2016-04-26 22:08:25
回答 1查看 41关注 0票数 0

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

分段故障

代码语言:javascript
复制
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 */
}

SegFault不

代码语言:javascript
复制
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 */
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-26 22:29:08

您没有向我们展示struct的定义,但请确保它看起来如下所示:

代码语言:javascript
复制
#define MAX_STRING_SIZE 128

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

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

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

或者,在将strcpy使用到这些成员之前,您可以用malloc动态地为字符串分配空间,然后在清理结构时使用free

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36876673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档