2017-08-14 5 views
-1

J'ai deux classes l'une est JPEG_Server et l'autre est JPEG_Client. A l'intérieur classe JPEG_Server Je disons déclaration suivante:memcpy() renvoie une exception après avoir été appelée dans une classe pour la copier dans une autre variable de classe.

class JPEG_Server 
{ 
    public: 
    unsigned char recv_buf[6]; 
}; 

Et en classe JPEG_Client Je suis en train de copier le contenu de * buf dans recv_buf en utilisant la fonction memcpy dans sa fonction d'envoi.

void JPEG_Client::send_data(char *buf, int len) //buf is coming from another class 
{ 
    memcpy(&JPEG_Server->recv_buf[0], &buf, len) 
} 

Mais il jette une exception et entre dans son .asm.

L'exception est comme ceci:

Exception thrown at 0x00C85579 in JPEG_Client.exe: 0xC0000005: Access violation writing location 0x00000000. 

If there is a handler for this exception, the program may be safely continued. 

Quelqu'un peut-il me aider ou commentaire que ce qui est mal à utiliser une fonction comme celui-ci?

+1

'emplacement 0x00000000' ressemble unintialized' unsigned char recv_buf [6] 'membre – ikleschenkov

+0

Vous écrivez sur' null', 'recv_buf' est pas initialisée. –

+0

Essayez de fournir un [mcve]. Le contexte dans lequel votre fonction sera appelée est certainement un facteur dans votre problème. Les possibilités évidentes sont que 'JPEG_Server' ne pointe pas sur un objet, ou que' len' dépasse '6' ou le nombre de caractères dans' buf'. De même, '&' on '& buf' dans' memcpy() 'n'est pas strictement correct si votre intention est de copier des caractères. – Peter

Répondre

0

Si vous souhaitez utiliser memcpy, vous avez besoin de suffisamment de mémoire sur heap (destination - recv_buf).

Votre recv_buf indique NULL, ce qui signifie qu'il est initialisé à NULL. lui assigner assez de mémoire sur tas:

void JPEG_Client::send_data(char *buf, int len) //buf is coming from another class 
{ 
    JPEG_Server->recv_buf = new char[len] 
    memcpy(&JPEG_Server->recv_buf[0], &buf, len) 
} 
+0

Puisqu'il s'agit d'un .cpp, dois-je aussi typer malloc? Parce qu'il est dit 'Erreur (actif) \t \t aucun constructeur approprié existe pour convertir de "void *" en "JPEG_Server"' – kni

+0

Fixé. N'oubliez pas d'utiliser 'delete []' avant de quitter. –

+0

ça ne m'a pas aidé. il dit maintenant comme ceci: 'Erreur (active) une valeur de type "char *" ne peut pas être affectée à une entité de type "unsigned char"' – kni