加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – _DebugHeap删除终止时的访问冲突

发布时间:2020-12-16 06:50:30 所属栏目:百科 来源:网络整理
导读:我在主要结束时遇到了一个奇怪的访问冲突,其原因是我遇到了一些困难. 关闭我的应用程序时,我在以下方面遇到访问冲突: Xdebug的 // TEMPLATE FUNCTION _DebugHeapDeletetemplateclass _Ty void __CLRCALL_OR_CDECL _DebugHeapDelete(_Ty *_Ptr) { // delete
我在主要结束时遇到了一个奇怪的访问冲突,其原因是我遇到了一些困难.

关闭我的应用程序时,我在以下方面遇到访问冲突:

Xdebug的

// TEMPLATE FUNCTION _DebugHeapDelete
template<class _Ty>
    void __CLRCALL_OR_CDECL _DebugHeapDelete(_Ty *_Ptr)
    {   // delete from the debug CRT heap even if operator delete exists
    if (_Ptr != 0)
        {   // worth deleting
        _Ptr->~_Ty();
        // delete as _NORMAL_BLOCK,not _CRT_BLOCK,since we might have
        // facets allocated by normal new.
        free(_Ptr); // **ACCESS VIOLATION**
        }
    }

堆栈跟踪:

>   msvcp100d.dll!std::_DebugHeapDelete<void>(void * _Ptr)  Line 62 + 0xa bytes C++
    msvcp100d.dll!std::numpunct<char>::_Tidy()  Line 190 + 0xc bytes    C++
    msvcp100d.dll!std::numpunct<char>::~numpunct<char>()  Line 122  C++
    msvcp100d.dll!std::numpunct<char>::`scalar deleting destructor'()  + 0x11 bytes C++
    msvcp100d.dll!std::_DebugHeapDelete<std::locale::facet>(std::locale::facet * _Ptr)  Line 62 C++
    msvcp100d.dll!std::_Fac_node::~_Fac_node()  Line 23 + 0x11 bytes    C++
    msvcp100d.dll!std::_Fac_node::`scalar deleting destructor'()  + 0x11 bytes  C++
    msvcp100d.dll!std::_DebugHeapDelete<std::_Fac_node>(std::_Fac_node * _Ptr)  Line 62 C++
    msvcp100d.dll!_Fac_tidy()  Line 41 + 0x9 bytes  C++
    msvcp100d.dll!std::_Fac_tidy_reg_t::~_Fac_tidy_reg_t()  Line 48 + 0xe bytes C++
    msvcp100d.dll!std::`dynamic atexit destructor for '_Fac_tidy_reg''()  + 0xf bytes   C++
    msvcp100d.dll!_CRT_INIT(void * hDllHandle,unsigned long dwReason,void * lpreserved)  Line 415 C
    msvcp100d.dll!__DllMainCRTStartup(void * hDllHandle,void * lpreserved)  Line 526 + 0x11 bytes  C
    msvcp100d.dll!_DllMainCRTStartup(void * hDllHandle,void * lpreserved)  Line 476 + 0x11 bytes   C

任何人都有任何想法可能导致这个?

我读过有关缓存的方面的内容,不确定这些内容是否相关?

解决方法

内存损坏错误(显然)可能导致此(以及许多其他类型)失败.

您是否尝试过使用valgrind(memcheck)或Rational Purify?它可能会报告问题(如果这是您第一次对代码库进行此类检查时,可能会隐藏在很多其他信息中.您仍然需要设计一个最小的“主要”实现来展示行为在内存和边界检查器下运行

$0.02

PS.以防万一,通常会出现内存损坏错误

>通过解除引用过时指针(在释放/删除后)>通过写入超出分配缓冲区的末尾>通过释放/删除以前的指针(主要是不良所有权跟踪的症状)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读