设置shared_ptr的向量 - _Block_Type_Is_Valid(pHead-> nBlockUse错误

时间:2014-03-09 20:40:26

标签: c++ vector

我正在尝试将C#中的Catalin Zima's 2D skeletal animation示例移植到C ++中以学习C ++。

我遇到一个奇怪的错误,我更新了一个shared_ptr的向量,我假设它与内存有关,因为我在代码的三次迭代后才遇到这个错误。

_Block_Type_Is_Valid(pHead-> nBlockUse)

在我的代码中,我使用了一个名为Transformation的类,它包含有关2D变换的数据,如平移,旋转和缩放。然后,关键帧由帧编号和一个这样的转换定义。 Keyframes的集合定义了KeyframeAnimation。最后,SkeletonAnimation是KeyframeAnimations的集合,一个用于骨架中的每个骨骼。

在我的Skeleton类中,我有一个Transformation std::vector<std::shared_ptr<Transform>> _localTransforms;类型的向量。这个想法是从SkeletonAnimationPlayer设置的,它首先更新当前动画的转换,然后通过播放器上的Apply方法将转换设置到Skeleton上。

//SkeletonAnimationPlayer
std::vector<std::unique_ptr<KeyFrameAnimationState>> _jointAnimations;

void SkeletonAnimationPlayer::Update(float elapsedSeconds)
{
    for(auto i = 0; i < _jointAnimations.size(); i++)
    {
        _jointAnimations[i]->Update(elapsedSeconds);
    }
}

void SkeletonAnimationPlayer::Apply(Skeleton& skeleton)
{
    for(auto i = 0; i < _jointAnimations.size(); i++)
    {
         skeleton.SetLocalTransform(i, *_jointAnimations[i]->CurrentKeyFrame);
    }
}

//Skeleton
std::vector<std::shared_ptr<Transformation>> _localTransforms;

void Skeleton::SetLocalTransform(int jointIndex, Transformation& transform)
{
    //When debugging this line seems to cause the error
    _localTransforms[jointIndex] = std::shared_ptr<Transformation>(&transform);
}

//Main
_animationPlayer->Update(deltaTime);
_animationPlayer->Apply(*_skeleton.get());

然而,在主循环的三次迭代之后(第三次调用Apply),我收到以下错误:

_Block_Type_Is_Valid(pHead-&gt; nBlockUse)

我的问题是两部分。我这样做是正确的吗?这个错误意味着什么,为什么我收到它?

我尝试在SetLocalTransform上重置smart_ptr,但仍然收到同样的错误:

_localTransforms[jointIndex].reset(&transform);

0 个答案:

没有答案