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