Windows 已在 XXXX.exe 中触发一个断点,其原因可能是堆被破坏

chengwei0019 2015-06-11 12:49:34
以下代码是在kdtree中查找pos点为重心的正方体领域点
Windows 已在 test.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 test.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 test.exe 具有焦点时按下了 F12。
求大神指导到底是什么原因???
一般都是在ret = find_nearest_Asquare2( node->right, pos, D, list, ordered, dim);这个地方出错。急急急啊》》》》到底是什么地方出现问题了啊?请各位大神给以指导啊!!!
struct kdres *kd_nearest_Asquare2(struct kdtree *kd, const double *pos, double D)
{
int ret;
struct kdres *rset;

if(!(rset = (kdres *)malloc(sizeof *rset)))
{
return 0;
}//判断rset是否初始化成功
if(!(rset->rlist = (res_node *)alloc_resnode()))
{
free(rset);
return 0;
}//判断rlist是否初始化成功
rset->rlist->next = 0;
rset->tree = kd;

if((ret = find_nearest_Asquare2(kd->root, pos, D, rset->rlist, 0, kd->dim)) == -1)
{
kd_res_free(rset);
return 0;
}
rset->size = ret;//赋值找到了多少临近点
kd_res_rewind(rset);
return rset;
}

static int find_nearest_Asquare2(struct kdnode *node, const double *pos, double D, struct res_node *list, int ordered, int dim)
{
double dist_sq, dist_x,dist_y,dist_z,dx;
int i, ret, added_res = 0;

if(!node) return 0;//注意这个地方,当节点为空的时候,表明已经查找到最终的叶子结点,返回值为零
dist_x = node->pos[0] - pos[0];
dist_y = node->pos[1] - pos[1];
dist_z = node->pos[2] - pos[2];
//如果距离在阈值范围内,就将其插入到返回结果链表中
if(abs(dist_x) < D && abs(dist_y) < D && abs(dist_z) < D)
{
if(rlist_insert(list, node, ordered ? dist_sq : -1.0) == -1) //这里是满足条件,就插入。
{
return -1;
}
added_res = 1;
}
//在这个节点的划分方向上,求两者之间的差值
//dx = pos[node->dir] - node->pos[node->dir];

//根据这个差值的符号, 选择进行递归查找的分支方向
ret = find_nearest_Asquare2(node->left, pos, D, list, ordered, dim);
//如果返回的值大于等于零,表明在这个分支中有满足条件的节点,则返回结果的个数进行累加,并在节点的另一个方向进行查找最近的节点
if(ret > 0 )
{
added_res += ret;
cout << "ret is :" << ret << endl;
}
ret = find_nearest_Asquare2( node->right, pos, D, list, ordered, dim);
if(ret == -1) {
return -1;
}
added_res += ret;

return added_res;
}
...全文
264 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-06-11
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
chengwei0019 2015-06-11
  • 打赏
  • 举报
回复
额。。。我已经解决了,if(rlist_insert(list, node, ordered ? dist_sq : -1.0) == -1)这里dist_sq没有初始化导致错误
fly_dragon_fly 2015-06-11
  • 打赏
  • 举报
回复
堆损坏通常就是越界

64,631

社区成员

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

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