2010-03-19 12 views
1

Quand essayer de faire un memset il donne l'exception suivanteException dans Memset

"exception non gérée à 0x1023af7d (PxSmartInterface.dll) dans SendOutDllTestExe.exe: 0xC0000005: violation d'accès emplacement d'écriture 0x40e3a80e."

Ma déclaration memset ressemblera à ceci

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

+0

les informations fournies sont vagues.il est difficile de deviner le problème avec cette information.please poster votre code si possible! – Vijay

Répondre

2

Ce n'est pas une exception C++, c'est une exception d'exploitation. Soit vous avez accédé à la mémoire qui n'existait pas ou vous avez corrompu une structure de données et écrasé son destructeur. (Je suppose que vous essayez de mettre à zéro un bloc avant de saisir la structure qu'il contient.)

En C++, vous n'appelez généralement pas memset. std::fill fait la même chose (et appelle généralement à memset si possible), mais avec le type de sécurité.

Si vous souhaitez mettre à zéro des blocs de mémoire avant de les charger, vous avez besoin d'une bibliothèque de débogage. Il n'y a aucun moyen propre d'accéder à la mémoire d'un objet après que son destructeur a été appelé et avant que free soit appelé. Debug malloc est probablement une caractéristique de votre environnement de développement.

Modifier: vous pouvez accéder à la mémoire pré-free pour les objets, mais pas pour les tableaux, en remplaçant delete. Mais ce n'est pas une activité pour un débutant/intermédiaire.

1

Très probablement, lpStatus ne pointe pas vers csStatus.GetLength() octets de mémoire inscriptible. Vous devez examiner la logique de la façon dont lpStatus est défini.