动态分配内存时的访问冲突

时间:2016-04-13 22:09:30

标签: c++ visual-studio

我正在为学校的项目编写一个程序,要求我们根据从文件中读取的数据(在本例中为字符串)创建Binary Search Tree。当输入重复的字符串时,树应该通过递增整数值来允许重复。

TreeNode是一个结构如下:

struct TreeNode {
    string word;
    int count;
    TreeNode * left;
    TreeNode * right;
};

我遇到的问题是当我尝试调用插入函数时,程序崩溃了。我运行调试器,我收到以下错误:

  

在Proj12.2.exe中0x00E2A87C抛出异常:0xC0000005:Access   违规读取位置0x00000014。

导致此错误的原因是什么? 以下是相关代码的其余部分:

TreeNode * Root = new TreeNode;
Root->right = NULL;

void insert(TreeNode *& root, string item) { //insert function, called by Root->right,temp
    if (root->word == item) {
        root->count++;
        return;
    }
    if (root == NULL && root->word != item) {
        root = new TreeNode;
        root->left = NULL;
        root->right = NULL;
        root->word = item;
        root->count = 1;
        return;
    }
    if (item < root->word) {
        insert(root->left, item);
    }
    if (item > root->word) {
        insert(root->right, item);
    }
}

1 个答案:

答案 0 :(得分:0)

if(root == NULL)应该是您在尝试使用 - &gt;访问任何数据成员之前执行的第一次检查运营商。 条件:if(root-&gt; word == item) condition:if(root == NULL&amp;&amp; root-&gt; word!= item)

您的root为NULL,然后您尝试访问导致崩溃的root-&gt;字。您正尝试使用无效指针访问数据成员。