Memset中的例外情况

时间:2010-03-19 05:07:40

标签: c++ mfc memset

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

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

我的memset语句将如下所示

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

2 个答案:

答案 0 :(得分:2)

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

在C ++中,您通常不会调用memsetstd::fill执行相同的操作(如果可能,通常会调用memset),但类型安全。

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

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

答案 1 :(得分:1)

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