2017-08-14 12 views
-1

私はJPEG_ServerとJPEG_Clientという2つのクラスを持っています。memcpy()は、別のクラス変数にコピーするクラスで呼び出された後に例外をスローします。

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

そしてJPEG_Clientクラスで、私はその送信機能でmemcpy関数を使用してrecv_bufへ* BUFの内容をコピーしようとしています:JPEG_Serverクラスの中に私はのは、次の宣言を言わせています。

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'は、いないに関わらず' unsigned char型のrecv_buf [6] 'あなたがNULL''に書いている – ikleschenkov

+0

メンバーは、 'recv_buf'が初期化されないされるようになります。 –

+0

[mcve]を提供してください。関数が呼び出されるコンテキストは、間違いなく問題の要因です。明らかな可能性は、 'JPEG_Server'がオブジェクトを指していないか、' len'が '6'や' buf'の文字数を超えていることです。また、 'memcpy()'の '&buf'の'& 'は、文字をコピーすることを意図している場合には厳密には正しくありません。 – Peter

答えて

0

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 *"の値を "unsigned char"タイプのエンティティに割り当てることができません。 – kni

関連する問題