【问题标题】:First-chance exception at ...: Access violation reading location ... when debugging using Visual Studio 2010... 处的第一次机会异常:使用 Visual Studio 2010 调试时访问冲突读取位置 ...
【发布时间】:2013-02-24 09:18:09
【问题描述】:

我非常努力地从遗留代码访问冲突中发现 继续获得:

First-chance exception at 0x57e77e1c in YouTubeLocal.exe: 0xC0000005: Access violation reading location 0x0000000c.

我的堆栈如下所示:

    Qt5Guid.dll!57e77e1c()  
    [Frames below may be incorrect and/or missing, no symbols loaded for Qt5Guid.dll]   
    Qt5Guid.dll!57e75604()  
    Qt5Guid.dll!57ed520b()  
    Qt5Guid.dll!57dcf18b()  
>   msvcr100d.dll!_unlock(int locknum=0x00000004)  Line 375 C
    msvcr100d.dll!_heap_alloc_dbg_impl(unsigned int nSize=0x00000040, int nBlockUse=0x00000001, const char * szFileName=0x00000000, int nLine=0x00000000, int * errno_tmp=0x0015cb70)  Line 507 + 0x7 bytes C++
    msvcr100d.dll!_heap_alloc_dbg_impl(unsigned int nSize=0x00000040, int nBlockUse=0x00000001, const char * szFileName=0x00000000, int nLine=0x00000000, int * errno_tmp=0x0015cb70)  Line 504 + 0xc bytes C++
    msvcr100d.dll!_nh_malloc_dbg_impl(unsigned int nSize=0x00000040, int nhFlag=0x00000000, int nBlockUse=0x00000001, const char * szFileName=0x00000000, int nLine=0x00000000, int * errno_tmp=0x0015cb70)  Line 239 + 0x19 bytes  C++
    msvcr100d.dll!_nh_malloc_dbg(unsigned int nSize=0x00000002, int nhFlag=0x0015cbdc, int nBlockUse=0x0015cbc8, const char * szFileName=0x0015cbb0, int nLine=0x0015cbc8)  Line 302 + 0x1d bytes   C++
    Qt5Cored.dll!533b0628()     
    Qt5Cored.dll!53388046()     
    Qt5Cored.dll!5335f56b()     
    Qt5Cored.dll!535e74c4()     
    Qt5Cored.dll!536f7198()     
    Qt5Widgetsd.dll!53aa4aea()  
    kernel32.dll!778bc3d4()     
    msvcr100d.dll!_unlock(int locknum=0x00000004)  Line 375 C
    msvcr100d.dll!_free_dbg(void * pUserData=0x53a4b300, int nBlockUse=0x019757a0)  Line 1270 + 0x7 bytes   C++
    msvcr100d.dll!_free_dbg(void * pUserData=0x53a4b300, int nBlockUse=0x019757a0)  Line 1267 + 0xc bytes   C++
    01b4bd40()  
    kernel32.dll!778bc3d4()     
    msvcr100d.dll!_free_base(void * pBlock=0x0015d060)  Line 50 + 0x13 bytes    C
    018a4a84()  
    kernel32.dll!778bc3d4()     
    msvcr100d.dll!_free_base(void * pBlock=0x57c49736)  Line 50 + 0x13 bytes    C
    0015d140()  
    feeefeee()  

调试器在这个文件 (mlock.c) 中停止

/***
* _unlock - Release multi-thread lock
*
*Purpose:
*       Note that it is legal for a thread to aquire _EXIT_LOCK1
*       multiple times.
*
*Entry:
*       locknum = number of the lock to release
*
*Exit:
*
*Exceptions:
*
*******************************************************************************/

void __cdecl _unlock (
        int locknum
        )
{
        /*
         * leave the critical section.
         */
        LeaveCriticalSection( _locktable[locknum].lock );
}

我找不到发生访问冲突的行。如何捕获导致异常的行?

更新
这是我的解决方案: Microsoft Application Verifier

【问题讨论】:

  • 你用的是什么调试器?从堆栈跟踪看来,您正在调试一个没有调试信息的程序,因此看起来您没有该程序的源代码。如果这是真的,那么修复这个错误几乎是不可能的......
  • 我使用 Visual Studio 2010 Express IDE,我有源代码并在调试模式下进行调试,它是我的源代码和 QT5 源代码
  • 在底部,feeefeee告诉你正在释放已经释放的内存。
  • 是的,谢谢,问题是如何找到这个地方......它没有给出任何提示......

标签: c++ visual-studio-2010 thread-safety access-violation


【解决方案1】:

尝试添加一些宏,在释放内存后将指针设置为 NULL。还可以尝试在使用此类指针之前添加一些断言或类似内容。有了它,您应该能够很快找到错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 2013-11-22
    相关资源
    最近更新 更多