1
私はちょうど非常に特殊な問題に遭遇しました。 memcpyまたは=演算子を使用して、特定の符号なしint変数(他の符号なしint変数に問題はありません)に値を代入しようとすると、プログラムは実行時エラーでクラッシュします。 1つのプログラムを実行しているときに必ずしも発生するとは限りませんが、2つ目のインスタンスを実行すると常にそうなります。さまざまなことをコメントしてコードを徹底的にチェックしたので、値の割り当てが問題であることは間違いありません。符号なし整数に値を代入するときのランタイムエラー
事前に感謝します。 unsigned int型の変数に代入
DWORD WINAPI RecvFunc(void* lpParameter)
{
BYTE header[5];
short size, datasize; // must be unsigned, changed to signed for testing
int num;
BYTE* data;
BYTE opcode;
while(true)
{
size = 0;
while(size < 5)
{
num = recv(sock, (char*)(header + size), 5 - size, 0);
if(num <= 0)
{
size = 0;
break;
}
//MessageBox(g_hwnd, "Header piece ok", "", MB_OK);
size += num;
}
if(size == 0)
{
//MessageBox(g_hwnd, "Header error", "", MB_OK);
continue;
}
opcode = header[0];
memcpy(&datasize, header + 1, sizeof(datasize));
if(datasize > 5)
{
data = new BYTE[datasize - 5];
}else{
data = NULL;
}
while(size < datasize)
{
num = recv(sock, (char*)(data + size - 5), datasize - size, 0);
//MessageBox(g_hwnd, "Packet post-recv", "", MB_OK);
if(num <= 0)
{
size = 0;
break;
}
size += num;
}
if(size == 0)
{
//MessageBox(g_hwnd, "Packet error", "", MB_OK);
delete[] data;
continue;
}
size -= 5;
//MessageBox(g_hwnd, "Received a command", "New cmd", MB_OK);
switch(opcode)
{
...
}
if(data != NULL)
{
delete[] data;
}
}
}
私たちが見ることができるコードが必要です。 – James
おそらく破られた気化器 –
私はオリジナルの投稿にコードを追加しました。これは別のスレッドです。 –