gpt4 book ai didi

c - 管道打开时的管道 "bad address"

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:21 24 4
gpt4 key购买 nike

因此,我正在尝试启动一个使用管道在进程之间进行通信的网络服务器。

我正在考虑创建一个名为 ctx 的结构来发送其他信息。

我的代码是这样的:

webserver.h

typedef struct
{
int pipefd[2];
} ctx_t;

webserver.c

int main(int argc, char *argv[]){
ctx_t *ctx = {0};
if(pipe(ctx->pipefd) == -1){
perror("ctx pipe error");
exit(EXIT_FAILURE);
}
...
...
}

输出:“ctx 管道错误:地址错误”

如果我改为这样声明我的程序,我没有错误并且程序继续运行

webserver.h

int pipefd[2];

webserver.c

int main(int argc, char *argv[]){
if(pipe(pipefd) == -1){
perror("ctx pipe error");
exit(EXIT_FAILURE);
}
...
...
}

为什么我不能在结构中打开管道?我仍然没有在主程序中创建任何分支。

谢谢。

最佳答案

您将空指针传递给不接受空指针的函数(系统调用)pipe()。不要那样做!

ctx_t *ctx = {0};

这将 ctx 设置为一个空指针,尽管有点冗长(大括号不是必需的,尽管它们无害)。在尝试使用它之前,您需要在某处分配 ctx_t 结构。

使用:

cts_t ctx = { { 0, 0 } };

和:

if (pipe(ctx.pipefd) != 0)
…report error etc…

使用 == -1 也可以。

关于c - 管道打开时的管道 "bad address",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57792350/

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