C语言 通过链路迭代导致分段故障



我有以下结构:

struct page {
    int index;
    int noutlinks;
    node* inlinks;
    char name[MAX_NAME];
};
struct node {
    page* page;
    node* next;
};
struct config {
    node* list;
};
从这个结构中,我使用以下代码调用存储在示例测试中的所有值。
void DumpInfo(node* list){
    for (node* iter = list; iter != NULL; iter = iter->next) {
        if(iter->page->inlinks == 0){
            result = first + dampener * 0;
        }
        printf("PAGE: %s ", iter->page->name);
        printf("INDEX: %zd ", iter->page->index);
        printf("IN: %zd ", iter->page->inlinks);
        printf("OUT: %zd ", iter->page->noutlinks);

    }

当我打印出来时,我得到以下值

PAGE: A INDEX: 0 IN: 6972112 (B, D) OUT: 0
PAGE: B INDEX: 1 IN: 6972048 (D)    OUT: 2
PAGE: C INDEX: 2 IN: 6972144 (B, D) OUT: 0
PAGE: D INDEX: 3 IN: 0              OUT: 3

对于页A,它包含页B, d的输入。我想要实现的是从B和d中获得OUT值。

我已经尝试了下面的代码,似乎抓住不正确的输出,然后崩溃与分割故障

int res = 0;
        for(node* in = list; in != NULL; in = in-> next){
            node* inlink = in->page->inlinks;
            res = inlink->next->page->noutlinks;
            printf("RESULT: %dn", res);
        }

如何在不引起分割故障的情况下获取每个输入的out值?

在您的代码中,

  1. node* inlink = in->page->inlinks;

    如果in->page为NULL,

    将出现段故障。

  2. inlink->next->page->noutlinks;

    如果inlink, inlink->nextinlink->next->page为NULL,

    将出现分段故障。

因为NULL指针解引用(运行时,具体来说是)会调用未定义行为。

解决方法:在解引用前为指针添加NULL检查。


我想你缺少了几个typedef s,没有它们,你的代码将无法编译

在您的代码中,

struct page {
    int index;
    int noutlinks;
    node* inlinks;
    char name[MAX_NAME];
};
struct node {
    page* page;
    node* next;
};
struct config {
    node* list;
};

(假设你没有写typedef) page* page;应该是struct page* page,和
node* next;应该是struct node* next吗?

顺便说一下,如果没有我指出的更改,您的代码无法编译。如果我假设你有typedef d他们,并没有在这里添加那部分,那么在运行时,你的代码最终会收到SIGSEGV即分割故障,如果inlink->next->page是NULL或inlink->next是NULL。

相关内容

  • 没有找到相关文章

最新更新