C# C语言中的堆错误# 我有一个C++程序来测试c++/CLI程序集(这个程序集是一个本地C++的DLL的包装器),我得到以下错误信息: Unhandled exception at 0x50f8fd85 (msvcr90d.dll) in TestKeyManagerApp.exe: 0xC0000005: Access violation writing location 0x00000000.

C# C语言中的堆错误# 我有一个C++程序来测试c++/CLI程序集(这个程序集是一个本地C++的DLL的包装器),我得到以下错误信息: Unhandled exception at 0x50f8fd85 (msvcr90d.dll) in TestKeyManagerApp.exe: 0xC0000005: Access violation writing location 0x00000000.,c#,c++,dll,heap,C#,C++,Dll,Heap,调试模式中的最后一个位置:dbgheap.c(VisualStudio2008输出) 我希望你能给我一些提示或提示 谢谢 错误的潜在原因: 指针errno\u tmp可能指向已删除的内存,或指向数组边界之外(-ve index或index>=length) 使用了无效的p\Invoke,或者加载的程序集已被释放 错误的潜在原因: 指针errno\u tmp可能指向已删除的内存,或指向数组边界之外(-ve index或index>=length) 使用了无效的p\Invoke,或者加载的程序集

调试模式中的最后一个位置:dbgheap.c(VisualStudio2008输出)

我希望你能给我一些提示或提示


谢谢

错误的潜在原因:

  • 指针
    errno\u tmp
    可能指向已删除的内存,或指向数组边界之外(-ve index或index>=length)

  • 使用了无效的
    p\Invoke
    ,或者加载的程序集已被
    释放


错误的潜在原因:

  • 指针
    errno\u tmp
    可能指向已删除的内存,或指向数组边界之外(-ve index或index>=length)

  • 使用了无效的
    p\Invoke
    ,或者加载的程序集已被
    释放


检查调用堆栈,特别是非托管调用堆栈。为此,必须启用非托管代码调试。
这可能是伪删除或挂起/无效指针访问。通过最小化本机DLL调用来缩小问题范围。

检查调用堆栈,特别是非托管调用堆栈。为此,必须启用非托管代码调试。
这可能是伪删除或挂起/无效指针访问。通过最小化本机DLL调用来缩小问题的范围。

您能再发布一些代码吗?看起来您正在访问某个未初始化的变量。显然,
errno\u tmp
也为空。它是从哪里来的?@leon22你能展示一下你的
DllImport
部分吗?@sailator在C++/client中没有P/Invoke你能发布更多的代码吗?看起来您正在访问某个未初始化的变量。显然,
errno\u tmp
也为空。它来自哪里?@leon22你能展示你的
DllImport
部分吗?@sailator在C++/CLIerrno\u中没有P/Invoke,tmp是CRT内部的,如果是0x00,可能是以前损坏过内存。在C++/CLI中,您不需要P/调用本机代码,只需调用它即可。errno_tmp是CRT的内部代码,如果是0x00,则可能是以前损坏内存的原因。在C++/CLI中,您不需要P/调用本机代码,只需调用它即可。
if (pHead == NULL)
{
    *errno_tmp = ENOMEM; <----- ACCESS VIOLATION
    RTCCALLBACK(_RTC_FuncCheckSet_hook,(1));
}
msvcr90d.dll!_heap_alloc_dbg_impl(unsigned int nSize=532, int nBlockUse=2, const char * szFileName=0x50ec24a8, int nLine=588, int * errno_tmp=0x00000000)  Line 431 + 0x3 bytes C++

msvcr90d.dll!_nh_malloc_dbg_impl(unsigned int nSize=532, int nhFlag=0, int nBlockUse=2, const char * szFileName=0x50ec24a8, int nLine=588, int * errno_tmp=0x00000000)  Line 239 + 0x19 bytes   C++

msvcr90d.dll!_calloc_dbg_impl(unsigned int nNum=1, unsigned int nSize=532, int nBlockUse=2, const char * szFileName=0x50ec24a8, int nLine=588, int * errno_tmp=0x00000000)  Line 593 + 0x20 bytes   C++

msvcr90d.dll!_getptd_noexit()  Line 588 + 0x1a bytes    C

msvcr90d.dll!_errno()  Line 281 + 0x5 bytes C

msvcr90d.dll!_calloc_dbg(unsigned int nNum=1, unsigned int nSize=532, int nBlockUse=2, const char * szFileName=0x50ec20a4, int nLine=373)  Line 646 + 0x11 bytes    C++

msvcr90d.dll!__CRTDLL_INIT(void * hDllHandle=0x50ec0000, unsigned long dwReason=2, void * lpreserved=0x00000000)  Line 373 + 0x18 bytes C

msvcr90d.dll!_CRTDLL_INIT(void * hDllHandle=0x50ec0000, unsigned long dwReason=2, void * lpreserved=0x00000000)  Line 214 + 0x11 bytes  C

ntdll.dll!77c68968()    
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!77c73820()    
ntdll.dll!77c735bc()