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.
谁能帮助我或评论说,什么是错的,使用这样的功能?
答
如果你想使用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)
}
'位置0x00000000'看起来像unintialized'无符号的字符recv_buf [6]'成员 – ikleschenkov
您是在'NULL'写作,'recv_buf'是未初始化。 –
尝试提供[mcve]。你的函数被调用的上下文无疑是你问题的一个因素。显而易见的可能性是'JPEG_Server'不指向一个对象,或者'len'超过'6'或'buf'中的字符数。如果你的意图是复制字符,'memcpy()'中的'&buf'上的'&'也不严格正确。 – Peter