Erreur : entrée dans void __cdecl _unlock (int locknum) VS2012
Bonjour,
Je développe une application console avec vS2012 update4 en C++.
suite à l'appel du bout de code suivant :
*this = ResultInter
qui appelle l'opérateur =
Code:
1 2 3 4 5 6 7 8 9
| BOOL_STRUCT& BOOL_STRUCT::operator =(const BOOL_STRUCT& Op)
{
OpOk = false;
// Controle A = A ??? impossible/inutile/erreur
if(this == &Op || !Op.OpOk || (Op.nbbits <= NULL) || (Op.boolfield == NULL)) return *this;
if(boolfield != NULL) delete [] boolfield; // erreur entrée dans _unlock
........
} |
déclenche une erreur et fais appel à la fct ci-dessous se trouvant dans mlock.c
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| /***
* _unlock - Release multi-thread lock
*
*Purpose:
* Note that it is legal for a thread to aquire _EXIT_LOCK1
* multiple times.
*
*Entry:
* locknum = number of the lock to release
*
*Exit:
*
*Exceptions:
*
*******************************************************************************/
void __cdecl _unlock ( int locknum )
{
/*
* leave the critical section.
*/
LeaveCriticalSection( _locktable[locknum].lock );
} |
pourtant le pointeur existe et bien initialisé avec une adresse (tableau de bool).
pourtant je fais appel à cet opérateur de multiples fois sans erreur.
Quelqu'un peut il m'aider ?
Merci.
Erreur : entrée dans void __cdecl _unlock (int locknum) VS2012
Re Bonjour,
Merci pour vos réponses qui m'ont largement aiguillé sur la solution ou plutôt bug (avant la fin du monde).
Le pointeur que je veux 'deleter' a été modifié auparavant en y inscrivant une valeur plus qui occupe une plus grande place mémoire avec memcpy().
L'erreur s'est produite plus loin dans l'opérateur = au moment de supprimer le pointeur (violation du heap local).
J'ai donc corrigé réussi à corriger le problème.
Merci encore BEAUCOUP pour vos réponses et votre aide.