shared_ptr-运算符删除中的访问冲突
shared_ptr - access violation in operator delete
我有一个用Visual C++编写的应用程序,我在这个代码片段中遇到了访问违规错误:
game_object_ptr GameObjectFactory::createGameObject(const int& id) {
game_object_ptr fullObj;
if(RANGE_PLAYERS_MIN <= id && RANGE_PLAYERS_MAX >= id) {
fullObj = game_object_ptr(new PlayerCharacter());
}
if(fullObj) {
return fullObj; // Crashes here...
}
return nullptr;
}
game_object_ptr
的定义如下:typedef std::shared_ptr<GameObject> game_object_ptr;
而CCD_ 3类是从CCD_。
调用堆栈如下:
msvcr110d.dll!operator delete(void * pUserData) Line 52 C++
MyApp.exe!GameObject::`scalar deleting destructor'(unsigned int) C++
MyApp.exe!std::_Ref_count<GameObject>::_Destroy() Line 161 C++
MyApp.exe!std::_Ref_count_base::_Decref() Line 120 C++
MyApp.exe!std::_Ptr_base<GameObject>::_Decref() Line 347 C++
MyApp.exe!std::shared_ptr<GameObject>::~shared_ptr<GameObject>() Line 624 C++
MyApp.exe!GameObjectFactory::createGameObject(const int & id) Line 44 C++
(...)
因此,删除GameObject
对象时似乎发生了崩溃,这表明它被删除了两次,但我完全不知道为什么要删除它,如果——据我所知——共享资源的引用计数不应该降到0,因为我在调用createGameObject()
函数时会进一步传递所有权:
account->m_characterInGame = std::dynamic_pointer_cast<PlayerCharacter>(GameObjectFactory::createGameObject(characterInfo->m_typeId));
有人知道这里发生了什么吗?也许我错过了一些显而易见的东西。
编辑:
m_characterInGame
的定义如下:character_ptr m_characterInGame;
和character_ptr
:typedef std::shared_ptr<PlayerCharacter> character_ptr;
根据David Schwartz和The Badger的建议,我确实重建了项目,这就成功了。可能,该文件没有使用正常的构建进行重新编译。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 尝试从单向链表C++中删除单个节点时出现读取访问冲突
- C++访问冲突读取位置0xDDDDDDCD当我尝试删除已更新的数组时
- 使用 free() 或删除时访问冲突
- 删除函数 c++ 的读取访问冲突异常
- C++:使用std::ifstream读取二进制文件后删除缓冲区/指针时发生访问冲突
- 删除二叉搜索树中的节点中的 Visual Studio 中的访问冲突异常
- 我在删除指针时遇到读取访问冲突
- shared_ptr-运算符删除中的访问冲突
- 新建/删除导致访问冲突
- 访问已删除的数组-访问冲突异常
- 删除 ssl::stream<ip::tcp::socket>* sslSocket 时提升访问冲突
- 删除矩阵时的访问冲突写入位置
- 在c++中删除多维结构会导致访问冲突
- 删除动态创建的二维数组时出现访问冲突消息
- 删除节点调用时出现访问冲突错误