在BinarySearchTree中存储对象会导致奇怪的解引用问题

时间:2016-04-08 20:43:07

标签: c pointers linked-list binary-tree binary-search-tree

对于作业,我需要编写以字符串作为输入的代码,并计算该字符串中使用最多的单词。

我们需要使用名为" WordCount"的结构的二进制搜索树来实现这一点。包含一个字符数组以及该单词出现次数的计数。

这就是结构的定义方式。

struct wordcount {
    char word[80];
    int count;
};

typedef struct wordcount WordCount;

二进制搜索树必须有一种创建节点的方法,这就是代码:

BSTnode* createNode(void* item) {
    BSTnode* newNode = (BSTnode*) malloc(sizeof(BSTnode));

    newNode->item = item;
    newNode->left = NULL;
    newNode->right = NULL;

    return newNode; 
}

当我在二进制搜索树中存储WordCount结构并尝试访问该项目,然后访问该单词时,我收到了分段错误。

如果我只是尝试访问树的项目,我会得到char字数组。这没有意义,因为我存储了wordCount结构,所以我应该两次取消引用它。

int main(int argc, char* argv[]) {
    if (argc >= 1) {
        WordCount* firstWord = (WordCount*) malloc(sizeof(WordCount));
        strcpy(firstWord->word,argv[1]);
        firstWord->count = 0;
        BSTnode* BST = createNode(firstWord);
        printf("%s", BST->item); // should be BST->item->word...but this does not work and says that it cannot find "word" which is apart of 
    }
    /*int i;
    char string[80];
    for(i = 1; i < argc; i++) {
        sscanf(argv[i], "%s", string);
        //printf("%s ", string);
        //insert(main, argv[i], wordCountCompare);
    }*/
}

非常感谢任何帮助。如果我的解释完全模糊或不完整,或者我完全忽略了某些内容,请告诉我。

我还想澄清一下,printf语句只是用于调试,只是它们不会成为实际程序的一部分......但是这一点仍然存在。

BSTnode的定义:

struct bstnode {
    void *item;
    struct bstnode *left;
    struct bstnode *right;
};
typedef struct bstnode BSTnode;

3 个答案:

答案 0 :(得分:1)

您的应为wordcount类型。

struct bstnode {
    wordcount *item;
    struct bstnode *left;
    struct bstnode *right;
};
typedef struct bstnode BSTnode;

您不能解除引用void指针(导致编译错误)

答案 1 :(得分:0)

您可能会遇到这些错误,因为您尝试取消引用指向NULL的指针。了解如何使用调试器!提示:在main中断并通过函数逐步查看分段错误发生的位置

答案 2 :(得分:0)

printf("%s", BST->item);

Printf&#34;%s&#34;期望一个字符串,item是一个结构。尝试:

printf("%s" BST->item->word);