当尝试执行memset时,它会出现以下异常
“SendOutDllTestExe.exe中0x1023af7d(PxSmartInterface.dll)的未处理异常:0xC0000005:访问冲突写入位置0x40e3a80e。”
我的memset语句将如下所示
memset(lpStatus,0,csStatus.GetLength());
答案 0 :(得分:2)
这不是C ++异常,它是一个操作异常。要么您访问了不存在的内存,要么您损坏了数据结构并使其析构函数崩溃。 (我假设您在delete
它所包含的结构之前尝试将块清零。)
在C ++中,您通常不会调用memset
。 std::fill
执行相同的操作(如果可能,通常会调用memset
),但类型安全。
如果要在free
之前将内存块清零,则需要一个调试库。在调用析构函数并调用free
之前,没有干净的方法来访问对象的内存。调试malloc可能是您的开发环境的一个功能。
编辑:您可以通过覆盖free
来访问对象的前delete
内存,而不是数组。但这不是初学者/中级人员的活动。
答案 1 :(得分:1)
最有可能的是,lpStatus
未指向可写内存的csStatus.GetLength()
个字节。您需要检查lpStatus
的设置逻辑。