Coin3D中未处理的异常错误(Open Inventor)

时间:2013-12-16 08:13:56

标签: c++ openinventor

我想创建一个通用函数来搜索节点中的类类型并返回其地址。它定义如下

SoNode* searchandgive(SoType searchtype, SoNode* searchnode)
{
    SoSearchAction mysearch;
    mysearch.setType(searchtype);
    mysearch.setInterest(SoSearchAction::FIRST);
    mysearch.apply(searchnode);
    if (mysearch.getPath() == NULL) { 

        std::cout<<"No property of this type was found";
    }

    SoPath* mypath=mysearch.getPath();
    return mypath->getTail();
}

但是当我传递像SoCoordinate3 :: getClassTypeId()这样的搜索类型以及要搜索senode的节点时,如下所示:

 SoCoordinate3 * mycoords=(SoCoordinate3*) searchandgive(SoCoordinate3::getClassTypeId(),senode);
 const SbVec3f *s=mycoords->point.getValues(0);
 std::cout<<"   " <<s->getValue()[25];  // Some point

但最后一行是生成未处理的异常错误。请告诉我这里做错了什么。最后一行是有效的,因为在函数范围内写的相同但不在此处。

1 个答案:

答案 0 :(得分:0)

有了这个,你就知道mysearch.getPath()可能是空的:

if (mysearch.getPath() == NULL) { 

        std::cout<<"No property of this type was found";
    }

但是你正在使用它而没有任何检查:

SoPath* mypath=mysearch.getPath();
    return mypath->getTail();

所以这会引发一个未处理的异常。

另一个诗是这条线:

std::cout<<"   " <<s->getValue()[25];  // Some point

没有检查向量中有多少个点,这也可能导致异常。