gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:03 27 4
gpt4 key购买 nike

在尝试访问名为 Request 的结构时,我一直遇到段错误,该结构填充了从管道读取的数据。我的代码有什么问题?此处抛出的错误是一个简单的 printf 尝试打印名称字段

结构定义:

typedef struct 
{
char code;
pid_t pid;
char *name;
char *object;
int id;
void *buffer;
size_t size;
} Request;

作者代码:

request.code   = MANADDUSER;   /* macro defining a char */
request.pid = getpid();
request.name = argument1; /* dinamycally allocated string */
request.object = NULL;
request.id = 0;
request.buffer = NULL;
request.size = 0;
if((fifoto = open(FIFOTOMMBOXD, O_WRONLY)) == -1) logMmboxman("error in opening FIFOTO\n", 1);
else logMmboxman("opened FIFOTO\n", 0);

if((write(fifoto, &request, sizeof(Request))) != sizeof(Request)) logMmboxman("error in writing FIFOTO\n", 1);
else logMmboxman("written on FIFOTO\n", 0);
close(fifoto);

读者代码:

if((fifoto = open(FIFOTOMMBOXD, O_RDWR)) == -1)   logMmboxd("error in opening FIFOTO\n", 1); 
else logMmboxd("opened FIFOTO\n", 0);

if((read(fifoto, &request, sizeof(Request))) != sizeof(Request)) logMmboxd("error in reading FIFOTO\n", 1);
else logMmboxd("read from FIFOTO\n", 0);
close(fifoto);

printf("%s\n", request.name);

最佳答案

您可能正在通过管道发送 Request.name 的地址。当接收者得到它时,Request.name显然指向无效内存。

关于c - 访问填充有从管道读取的数据的结构时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5723474/

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