使用C++List出现读取访问权限冲突的问题。求解
问题描述:
我创建了一个Animation类型的List用来放所有的Animation对象。animation类的实现如下
#include "cAnimation.h"
Animation::Animation(int imgNum, TCHAR *fileName, long frameSpeed, int xPos, int yPos)
{
TCHAR path[100];
m_AnimationImg = new CxImage [imgNum];//图片数组存放动画帧
m_HeadImg = new CxImage();//保存图片数组头指针
m_HeadImg = m_AnimationImg;
for (int i=0;i<imgNum;i++)//添加动画帧到图片数组
{
swprintf_s(path, L"%s%d.png", fileName, i);
m_AnimationImg->Load(path, CXIMAGE_FORMAT_PNG);
m_AnimationImg++;
}
m_AnimationImg = m_HeadImg;
m_frameSpeed = frameSpeed;//图片播放速度
m_xPos = xPos;//动画显示坐标
m_yPos = yPos;
m_ImgNum = imgNum;//图片数量
QueryPerformanceFrequency(&m_Frequence);//频率
QueryPerformanceCounter(&m_StartCounter);//起始计数器
}
bool Animation::Draw(HDC m_hdc,UINT xPos,UINT yPos)
{
static long m_time = 0,lastTime=0;//时间间隔
QueryPerformanceCounter(&m_CurCounter);//当前计数器
m_time = (m_CurCounter.QuadPart - m_StartCounter.QuadPart) * 1000 / m_Frequence.QuadPart;
m_AnimationImg->Draw(m_hdc,xPos,yPos);//绘制当前图片
//保证循环播放图片
int static i = 0;
if (i == m_ImgNum)
{
i = 0; m_AnimationImg = m_HeadImg;
}
//设置图片播放速度
if (m_time - lastTime >= m_frameSpeed)
{
lastTime = m_time;
i++;
m_AnimationImg ++;
}
return true;
}
bool Animation::Draw(HDC m_hdc)
{
static long m_time = 0, lastTime = 0;
QueryPerformanceCounter(&m_CurCounter);
m_time = (m_CurCounter.QuadPart - m_StartCounter.QuadPart) * 1000 / m_Frequence.QuadPart;
m_AnimationImg->Draw(m_hdc, m_xPos, m_yPos);
int static i = 0;
if (i == m_ImgNum)
{
i = 0; m_AnimationImg = m_HeadImg;
}
if (m_time - lastTime >= m_frameSpeed)
{
lastTime = m_time;
i++;
m_AnimationImg++;
}
return true;
}
bool Animation::Clean()
{
return true;
}
Animation::~Animation()
{
//delete m_HeadImg;
//delete [m_ImgNum] m_AnimationImg;
}
Animation::Animation()
{
}
bool Animation::Update(int xPos,int yPos)
{
m_xPos = xPos;
m_yPos = yPos;
return true;
}
list定义如下
typedef list<Animation> AnimationList;
AnimationList m_AllAnimation;
之后在push_back()了两个animation;
如果只放一个animation不会出现读取访问权限冲突的问题。放两个animation进去,会是这样:第一个animation开始播放,第二个animation只绘制出了第一张图片,当第一个animation播放完就会出现问题
list的遍历
bool AnimationMgr::Draw(HDC hdc)
{
list<Animation>::iterator aniIterator;
for (aniIterator = m_AllAnimation.begin();aniIterator != m_AllAnimation.end();++aniIterator)
{
(*aniIterator).Draw(hdc);
}
return true;
}
请问是什么原因呢?
答
已解决。将animation里面的图片数组使用下标方式访问。而不是指针方式
答
求解答。写代码卡在这地方了。
答
这种引发断点的最好办法是进行调试,还有你代码看不出什么问题
答
(*aniIterator).Draw(hdc); //记得清除第一个,然后在绘制第二个。。