二叉排序树建立时 VS引发异常:读取访问权限冲突 问题
数据的结构:
typedef struct Node {ElemType data;
struct Node *lchild;
struct Node *rchild;
} NODE, *BSTree;
****二叉排序树的建立
参数:(BSTree *pTree, ElemType key) 二叉树的指针与查找关键字
返回值: void
void InsertNode(BSTree *pTree, ElemType key)
{
//当结点为空时;
if (*pTree == NULL)
{
*pTree = malloc(sizeof(NODE)); //申请空间;
(*pTree)->data = key;
(*pTree)->rchild = NULL; (*pTree)->lchild = NULL;
return; //跳出循环带入新的值;
}
// 输入时限定没用相同的数字 一个二叉排序树中不可出现相同的字 ;
// 当不为空时;
if ((*pTree)->data > key)
InsertNode( (*pTree)->lchild ,key);
else
InsertNode((*pTree)->rchild ,key);
}
调用:
void create_BSTree(BSTree *pTree) {int i;
for (i = 0; i < nodenum; i++)
InsertNode(pTree, arr[i]); //arr[]为存放数据的数组
}
测试数据:
56 72 22 59 36 44 77 25 32 47 84 19 37 49
一下为单步调试出现的问题; (使用 vs 2017)
在 存入第二个数据的这个位置出现上述错误;
if (*pTree == NULL)
查阅了一下资料大多数说是野指针,和空指针的使用造成的,是我的参数传递错了吗?
InsertNode( (*pTree)->lchild ,key);
还是其它问题,希望大神解释一下;
回答
你的 BSTree 本身就是 NODE 结构的指针
那么 BSTree *pTree
就相当 NODE** pTree
你在调用 create_BSTree 传递的 pTree 是什么?如果为 NULL,那么 *pTree
就是从 0 地址取数据,必然会崩。
而且你的
InsertNode( (*pTree)->lchild ,key);
传递的是lchild 类型是 struct Node *
,而你的 InsertNode
接受的是 BSTree *
,这两个不是一个级东西啊。
从代码上看,你对指针的理解是有问题的,把所有的 BSTree 删掉吧,把 BSTree 的地方换成NODE应该就可以了。
以上是 二叉排序树建立时 VS引发异常:读取访问权限冲突 问题 的全部内容, 来源链接: utcz.com/a/23927.html