Ошибка необработанного исключения в Coin3D (Open Inventor)

Я хотел сделать общую функцию, которая будет искать тип класса в узле и возвращает его адрес. Определяется ниже

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

Но последняя строка генерирует ошибку необработанного исключения. Пожалуйста, расскажите, что я здесь делаю не так. Последняя строка действительна, поскольку то же самое, написанное внутри области действия функции, работает, но не здесь.

0

Решение

С этим вы стоите, что mysearch.getPath() может быть нулевым:

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

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

но ниже вы используете это без какой-либо проверки:

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

так что это может вызвать необработанное исключение.

Другой poitn это строка:

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

Не проверяется, сколько точек находится в векторе, и это также может вызвать исключение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]