(递归建立二叉搜索树时错误)Unhandle exception in FaceR.exe(NTDLL.DLL):0XC0000005:Access Violation

南京短暂的春天 2009-04-29 12:18:10
void BSTree::CreateBSTree(BSTree *&BST,vector<t_point> databag,unsigned int n)
{

BST->data=databag;
BST->left=BST->right=NULL;
vector<t_point> leftnode;
vector<t_point> rightnode; //t_point是我自己定义的一个类,该类里面包含一个一维的数组
static int dep=0;
int k=dep%3;
double midd=mid(databag,databag.size(),k); //求取最中间大小的值
BST->discr=midd;
for(unsigned int i=0;i<(databag.size());i++) //根据是否大于中间值的大小来建立leftnode和rightnode
{
if(databag[i].dot[k]>=midd)
{
t_point *pi=new t_point(databag[i].dot[0],databag[i].dot[1],databag[i].dot[2]);
rightnode.push_back(*pi);
}
else
{
t_point *pi=new t_point(databag[i].dot[0],databag[i].dot[1],databag[i].dot[2]);
leftnode.push_back(*pi);
}
}
dep++;
if(databag.size()>10) //我把这修改成1000就正常了。但是我需要它小于20
{
if(rightnode.size()!=0)
{
BST->right=new BSTree;
CreateBSTree(BST->right,rightnode,unsigned int(rightnode.size())); //创建左子数 }
if(leftnode.size()!=0)
{
BST->left=new BSTree;
CreateBSTree(BST->left,leftnode,unsigned int(leftnode.size())); //创建左子数 }
}
}

处理的数据有6000个左右。
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liliangbao 2009-04-29
  • 打赏
  • 举报
回复
帮顶~
stone_clock 2009-04-29
  • 打赏
  • 举报
回复
应该是非法访问了内存(如果是多线程有可能是共享资源没互斥导致的问题)。如果可重现用VC代码调,应该很快就能找到出错位置。
goodname 2009-04-29
  • 打赏
  • 举报
回复
单就这段代码看不出什么问题。

递归的东西是比较难找出问题的,你能否给个能运行得东西,可以帮你调试一下。
  • 打赏
  • 举报
回复
没人鸟我?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧