memcpy()在类中被调用以复制另一个类变量后抛出异常。

问题描述:

我有两个类,一个是JPEG_Server,另一个是JPEG_Client。里面JPEG_Server类我都假设如下声明:memcpy()在类中被调用以复制另一个类变量后抛出异常。

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

而在JPEG_Client类我试图在其发送功能使用memcpy函数来BUF的*的内容复制到recv_buf。

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

但它会抛出一个异常并进入其.asm。

例外情况是这样的:

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. 

谁能帮助我或评论说,什么是错的,使用这样的功能?

+1

'位置0x00000000'看起来像unintialized'无符号的字符recv_buf [6]'成员 – ikleschenkov

+0

您是在'NULL'写作,'recv_buf'是未初始化。 –

+0

尝试提供[mcve]。你的函数被调用的上下文无疑是你问题的一个因素。显而易见的可能性是'JPEG_Server'不指向一个对象,或者'len'超过'6'或'buf'中的字符数。如果你的意图是复制字符,'memcpy()'中的'&buf'上的'&'也不严格正确。 – Peter

如果你想使用memcpy,你需要足够的内存堆(destination-recv_buf)。

您的recv_buf指向NULL,表示它已初始化为NULL。在堆上分配他足够的内存:

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

既然它是一个.cpp我需要类型malloc以及?因为它说像 '错误(活动)\t \t没有合适的构造函数存在将“void *”转换为“JPEG_Server”' – kni

+0

已修复。不要忘记在退出之前使用'delete []'。 –

+0

它没有帮助我。它现在说的是: '错误(活动)类型“char *”的值不能分配给类型为“无符号字符”的实体 – kni