首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C空指针检查在ai_next链接列表中失败

C空指针检查在ai_next链接列表中失败
EN

Stack Overflow用户
提问于 2020-12-31 18:22:37
回答 1查看 99关注 0票数 0

后台:我正在关注如何使用C套接字侦听和接收传入连接的Beej网络编程指南

problem :我遇到的问题是,在遍历要侦听的地址链接列表时,我会得到分段错误。我确实检查下一个结构是否为null,但这不起作用。

我尝试过的:在这段代码和我之前编写的工作示例之间,我只能分辨出一个区别,那就是这些地址是我自己的计算机上的地址,而不是另一个主机上的地址。我也看过getaddrinfo的手册页,并且尽可能地遵循示例实现。

代码语言:javascript
运行
复制
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>

#define MYPORT "6161"

int main() {
    struct addrinfo hints, *res;

    memset(&hints, 0, sizeof hints);
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_family = AI_PASSIVE;

    getaddrinfo(NULL, MYPORT, &hints, &res);

    struct addrinfo *addr;
    for (addr = res; addr != NULL; addr = addr->ai_next) {
        printf("Here's one addr!");
    }

    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-31 19:01:29

我发现了问题..。

代码语言:javascript
运行
复制
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>

#define MYPORT "6161"

int main() {
    struct addrinfo hints, *res;

    memset(&hints, 0, sizeof hints);
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_family = AI_PASSIVE;

    getaddrinfo(NULL, MYPORT, &hints, &res);

    struct addrinfo *addr;
    for (addr = res; addr != NULL; addr = addr->ai_next) {
        printf("Here's one addr!");
    }

    return 0;
}

这是你的密码。

这是修正后的代码:

代码语言:javascript
运行
复制
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>

#define MYPORT "6161"

int main() {
    struct addrinfo hints, *res;

    memset(&hints, 0, sizeof hints);
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE;

    getaddrinfo(NULL, MYPORT, &hints, &res);

    struct addrinfo *addr;
    for (addr = res; addr != NULL; addr = addr->ai_next) {
        printf("Here's one addr!");
    }

    return 0;
}

您只编写了两次ai_family,从而将AI_PASSIVE分配给hints.ai_family而不是hints.ai_flags

我试过了修正后的代码,效果很好。

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

https://stackoverflow.com/questions/65524405

复制
相关文章

相似问题

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