Исключение в Memset - PullRequest
       24

Исключение в Memset

1 голос
/ 19 марта 2010

При попытке сделать memset выдает следующее исключение

"Необработанное исключение в 0x1023af7d (PxSmartInterface.dll) в SendOutDllTestExe.exe: 0xC0000005: расположение записи нарушения доступа 0x40e3a80e."

Мой оператор memset будет выглядеть так

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

Ответы [ 2 ]

2 голосов
/ 19 марта 2010

Это не исключение C ++, это рабочее исключение. Либо вы получили доступ к памяти, которой не было, либо вы испортили структуру данных и разрушили ее деструктор. (Я предполагаю, что вы пытаетесь обнулить блок перед delete структурой, которую он содержит.)

В C ++ вы обычно не звоните memset. std::fill делает то же самое (и обычно звонит на memset, если это возможно), но с типом security.

Если вы хотите обнулить блоки памяти перед free их использованием, вам нужна библиотека отладки. Нет чистого способа получить доступ к памяти объекта после вызова его деструктора и до вызова free. Отладка malloc, вероятно, является функцией вашей среды разработки.

Редактировать: возможно, вы сможете получить доступ к памяти до free для объектов, но не к массивам, переопределив delete. Но это НЕ занятие для начинающего / среднего уровня.

1 голос
/ 19 марта 2010

Скорее всего, lpStatus не указывает на csStatus.GetLength() байтов доступной для записи памяти. Вам необходимо изучить логику установки lpStatus.

...