2011-05-02 1 views
0

Je reçois une violation d'accès à strncpy dans le code ci-dessous.crash de l'application à strncpy dans VS2008

if(WaitForSingleObject(RdStatShared.hMutex, INFINITE) == WAIT_OBJECT_0) 
{ 
    if(RdStatShared.Resp.itemLength != NULL) 
    {     
     strncpy((char*)TData[53], (char*)RdStatShared.Resp.itemLength, (size_t)0x01); 
    } 
    ReleaseMutex(RdStatShared.hMutex); 
} 

RdStatShared est un objet partagé utilisé dans le projet. Comme il est mis à jour aléatoirement, j'ai voulu verrouiller l'objet avant de le lire. TData est un type BYTE de longueur 1024 et itemLength est un UCHAR. Pendant le code de débogage, dans le code de l'assembly, je vois que la violation d'accès a échoué lors de la copie de la chaîne source dans un tampon temporaire. Quelqu'un peut-il dire pourquoi la violation d'accès s'est produite à strncpy?

Merci pour toute information utile.

Lakshmi.

+1

itemLength est vraiment un UCHAR? pas UCHAR *? Si oui, je crois que c'est le problème ... –

Répondre

2

Le second argument de strncpy est l'emplacement de copie, et vous semblez passer RdStatShared.Resp.itemLength, qui ressemble étrangement à la taille de quelque chose, et pas comme un pointeur vers un tampon de caractères. Si vous voulez l'interpréter comme tel, alors vous devez probablement lui passer un pointeur, pas la chose elle-même; c'est-à-dire (char*) &(RdStatShared.Resp.itemLength).

+1

Le premier argument est faux aussi, il devrait être & TData [53]. –

+0

@Hans: oui, je n'ai pas lu de trop près. Vous avez absolument raison. –