C:访问动态分配的元素时出错



我正在尝试编写一个搜索某个元素的函数。但是,当我尝试访问元素时,它存在错误。我注释了search函数中生成错误的行。

#include <stdlib.h>
#include <stdio.h>
#define m 2
typedef struct pag {
    int nr;
    int key[m];
    struct pag * child[m + 1];
}* page;
page init(page B) {
    int i;
    B = malloc(sizeof(struct pag));
    for (i = 0; i < m; i++) {
        B->key[i] = 0;
        B->child[i] = malloc(sizeof(struct pag));
    }
    B->child[i] = malloc(sizeof(struct pag));
    return B;
}
page search(page B, int k) {
    int i;
    if (B == NULL )
        return B;
    // 1. cautare liniara
    for (i = 0; i < m; i++) {
            // 2. find the desired value
        if (B->key[i] == k) {
            return B;
            // 3. find the value greater or equal, take the left road to the child
        } else if (B->key[i] >= k) {
            return search(B->child[i], k); //exists with error here
        }
    }
    return search(B->child[i], k); //also exists with error here
}
int main() {
    page B = init(B);
    if (search(B, 2) == NULL )
        printf("Negasit");
    else
        printf("Gasit");
    return 0;
}

您的init函数构建一个两级树,该树由一个初始化的根节点和一堆(实际上是 3 个)完全未初始化的子节点组成。所有子节点都包含垃圾。

当你执行search(B, 2)时,它将查看根节点,然后递归地调用search以查找其中一个未初始化的子节点(实际上是最后一个)。由于子节点未初始化,代码要么崩溃,要么执行其他完全不可预测的操作。

在尝试搜索树中的任何内容之前,请正确初始化树。

最新更新