我正在尝试实现自适应霍夫曼代码,但是在尝试构建树时,在“ currentNYT-> lchild = newNYT;”行执行代码时遇到了分段错误。在addnode()函数中。

有人可以帮我吗?我可能不知道这很简单。暂时没有使用C。

//variable and type declarations

struct treeElement {
    unsigned long weight;
    unsigned short id;
    char chr;
    struct treeElement *lchild, *rchild, *parent;
};

typedef struct treeElement node;

node *root, *currentNYT;

//functions

void initTree() {
    root = NULL;
    currentNYT = malloc(sizeof(node));
    currentNYT = root;
} //initTree

void addNode(char newNodeChr) {
    node *newNYT, *newExternal;
    newNYT = malloc(sizeof(node));
    newNYT->id=maxNodes-idCount; idCount++;
    newNYT->chr='\0';
    newNYT->weight=0;
    newNYT->parent=currentNYT;
    newNYT->lchild=newNYT->rchild=NULL;
    newExternal = malloc(sizeof(node));
    newExternal->id=maxNodes-idCount;
    newExternal->chr=newNodeChr;
    newExternal->weight=1;
    newExternal->parent=currentNYT;
    newExternal->lchild=newExternal->rchild=NULL;
    currentNYT->lchild = newNYT;
    currentNYT->rchild = newExternal;
    currentNYT=newNYT;
} //addNode

最佳答案

以下似乎是第一个错误...

currentNYT = malloc(sizeof(node));
currentNYT = root;


可能要

root = malloc(sizeof(node));
currentNYT = root;


代替

08-28 19:11