1

当尝试执行 memset 时,会出现以下异常

“SendOutDllTestExe.exe 中 0x1023af7d (PxSmartInterface.dll) 处的未处理异常:0xC0000005:访问冲突写入位置 0x40e3a80e。”

我的 memset 语句看起来像这样

memset(lpStatus, 0, csStatus.GetLength());

4

2 回答 2

2

这不是 C++ 异常,而是操作异常。要么您访问了不存在的内存,要么您损坏了数据结构并使其析构函数崩溃。(我假设您在deleteing 包含的结构之前尝试将块归零。)

在 C++ 中,您通常不会调用memset. std::fill做同样的事情(如果可能,通常会调用 to memset),但具有类型安全性。

如果你想在freeing 之前将内存块清零,你需要一个调试库。在调用对象的析构函数之后和调用之前,没有干净的方法可以访问对象的内存free。调试 malloc 可能是您的开发环境的一项功能。

编辑:您可能可以free通过覆盖来访问对象的预存,但不能访问数组delete。但这不是初学者/中级的活动。

于 2010-03-19T05:17:25.607 回答
1

最有可能的是,lpStatus不指向csStatus.GetLength()可写内存的字节。您需要检查如何lpStatus设置的逻辑。

于 2010-03-19T05:25:09.933 回答