我从函数返回共享指针时遇到问题。使用函数的return语句抛出异常。
这是功能:
// Icp.cpp
std::shared_ptr<ICPResult> Icp::fit() {
// inner part of function
// return values from inner part of fucntion
double fitnessScore = icp.getFitnessScore();
Eigen::Matrix4f transformation = icp.getFinalTransformation();
return std::make_shared<ICPResult>(fitnessScore, transformation);
}
标题标题的相关部分:
// Icp.h
std::shared_ptr<models::detection::ICPResult> fit();
退回课程:
// ICPResult.h
class ICPResult : public DetectionResult {
public:
ICPResult();
ICPResult(const double score, const Eigen::Matrix4f transformation);
Eigen::Matrix4f transformationIcp;
private:
};
家长班:
// DetectionResult.h
class DetectionResult {
public:
DetectionResult();
DetectionResult(const double score);
double score;
private:
};
在使用if语句的行中的“... VS17 \ VC \ Tools \ MSVC \ 14.12.25827 \ include \ memory”第892行引发了异常
void _Decref()
{ // decrement use count
if (_MT_DECR(_Uses) == 0)
{ // destroy managed resource, decrement weak reference count
_Destroy();
_Decwref();
}
}
例外文字: System.AccessViolationException:'尝试读取或写入受保护的内存。这通常表明其他内存已损坏。'
我通常返回共享指针没有任何问题,但在这种情况下我不知道是什么问题。在我看来,计算共享指针的引用计数有点问题,但我不知道如何处理它。我将不胜感激如何解决这个问题。
答案 0 :(得分:0)
好的,这是解决方案。参考@Paul B回答问题是每个包含特征数据类型的类或结构都必须处理固定大小的可矢量化特征类型。有关此问题的详细信息,请访问https://eigen.tuxfamily.org/dox/group__TopicStructHavingEigenMembers.html
我的具体问题的解决方案是将EIGEN_MAKE_ALIGNED_OPERATOR_NEW宏添加到ICPResult.h的公共部分
// ICPResult.h
class ICPResult : public DetectionResult {
public:
ICPResult();
ICPResult(const double score, const Eigen::Matrix4f transformation);
Eigen::Matrix4f transformationIcp;
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
private:
};
非常感谢