小编Bla*_*son的帖子

x86/C++ - 指针指针:编译器违反了const?

我正在为我的学生项目的游戏引擎开发一个共享指针(称为Handle)实现,我们遇到了一个我们无法解释的错误.出于某种原因,在我们工厂的某个点上,有一个无效的内部指针通过句柄传递给工厂,这在我们的原型加载过程中导致了崩溃.我们通过这个过程进行了几个小时的调试,并将任何复杂的语句分解为最简单的版本,以便于调试.我终于将问题分解为Handle类的复制构造函数.但是,似乎还有一些中间步骤,其中内部指针被释放.我阅读了有关可能导致此问题的所有文章,但没有找到任何内容.最后,我决定查看反汇编,看看能否弄清楚发生了什么.这是没有反汇编的复制构造函数.

template <class TYPE>
Handle<TYPE>::Handle(const Handle<TYPE>& rhs, bool weak) : m_weak(weak), m_ref_count(rhs.m_ref_count), m_ptr(rhs.m_ptr)
{
  if(!m_weak)
    ++(*m_ref_count);
}
Run Code Online (Sandbox Code Playgroud)

这是带有反汇编的复制构造函数.

template <class TYPE>
Handle<TYPE>::Handle(const Handle<TYPE>& rhs, bool weak) : m_weak(weak), m_ref_count(rhs.m_ref_count), m_ptr(rhs.m_ptr)
{
013FFF50 push         ebp
013FFF51 mov          ebp,esp
013FFF53 sub          esp,0CCh
013FFF59 push         ebx
013FFF5A push         esi
013FFF5B  push        edi  
013FFF5C  push        ecx  
013FFF5D  lea         edi,[ebp-0CCh]  
013FFF63  mov         ecx,33h  
013FFF68  mov         eax,0CCCCCCCCh  
013FFF6D  rep stos    dword ptr es:[edi]  
013FFF6F  pop         ecx  
013FFF70  mov         dword ptr [this],ecx  
013FFF73  mov         eax,dword ptr [this] …
Run Code Online (Sandbox Code Playgroud)

c++ x86 shared-ptr visual-studio-2013

9
推荐指数
1
解决办法
230
查看次数

标签 统计

c++ ×1

shared-ptr ×1

visual-studio-2013 ×1

x86 ×1