以下代码而不是将指针返回到它返回的audioResource 其他无效的东西,我已经完成了调试器,问题在于这一行
return *list_it;
这是我的功能:
AudioResource* AudioManager::getResource(const unsigned int ID)
{
std::list<AudioResource*>::iterator list_it;
for(list_it = m_resources.begin(); list_it!= m_resources.end(); list_it++)
{
if((*list_it)->getID()==ID)
{
std::cout<<*(*list_it)->getFileName();
return *list_it;
}
}
return nullptr;
}
我和我试过把它作为(* list_it),但我得到了相同的结果= s
如何填充...
Resource* AudioManager::addResource(const unsigned int ID,
const std::string fileName, const unsigned int scope,
const std::string type)
{
AudioResource* temp;
if(type == "AUDIO_TYPE_SAMPLE")
{
temp = new AudioResource(ID,fileName,scope,
RESOURCE_AUDIO,AUDIO_TYPE_SAMPLE);
m_resources.push_back(temp);
}
else if(type == "AUDIO_TYPE_STREAM")
{
temp = new AudioResource(ID,fileName,scope,
RESOURCE_AUDIO,AUDIO_TYPE_STREAM);
m_resources.push_back(temp);
}
return temp;
}
致电获取资源
cout<<AudioManager::getInstance()->getResource(IDnum)->getFileName();
答案 0 :(得分:2)
如果type
不是这两个值,则会将未初始化的指针添加到m_resources
:
AudioResource* temp;
if(type == "AUDIO_TYPE_SAMPLE")
{
temp = new AudioResource(ID,fileName,scope,RESOURCE_AUDIO,AUDIO_TYPE_SAMPLE);
}
else if(type == "AUDIO_TYPE_STREAM")
{
temp = new AudioResource(ID,fileName,scope,RESOURCE_AUDIO,AUDIO_TYPE_STREAM);
}
m_resources.push_back(temp);
将temp
初始化为NULL
,仅m_resources
加temp != NULL
。
此外,该函数返回相同的未初始化指针。
答案 1 :(得分:1)
如果nullptr
不存在,则返回ID
,但是您永远不会在呼叫站点检查它,如果ID不存在,将为您提供空指针访问权限这可能会产生问题。
AudioManager::getInstance()->getResource(IDnum)->getFileName();
将其更改为
AudioResource* res = AudioManager::getInstance()->getResource(IDnum);
if(res)
std::cout << res->getFileName();