hireddis SET遇到细分错误

我正在尝试使用hiredis将SET的结构导入Redis:

struct StatLite
{
    uid_t uid;
    gid_t gid;
    mode_t mode;
}

bool RedisPermissionHandler::Set(std::string path,StatLite stat)
{
    redisReply *reply = (redisReply*)redisCommand(this->redis,"SET %b %b",path.c_str(),(size_t)path.length(),stat,(size_t)sizeof(stat));
    freeReplyObject(reply);
    return true;
}

但是,这会在hiredis内部某个地方出现分段错误。

this->redispathstat具有适当的值。 GET命令可以工作并提供NIL答复类型(因为Redis为空)。

我在做什么错了?

windls 回答:hireddis SET遇到细分错误

这里的麻烦是您要指定原始结构,而不是指向结构的指针:

bool RedisPermissionHandler::Set(std::string path,StatLite stat)
{
    redisReply *reply = (redisReply*)redisCommand(this->redis,"SET %b %b",path.c_str(),(size_t)path.length(),&stat,(size_t)sizeof(stat) // Pointer to stat!
    );

    freeReplyObject(reply);
    return true;
}

驱动程序可能正在寻找特定大小的void*缓冲区,并将stat视为void*,从而在该指针被取消引用时导致段错误。

本文链接:https://www.f2er.com/3169443.html

大家都在问