2011-01-27 45 views
1

我刚刚遇到一个非常奇怪的问题。当我尝试使用memcpy或=运算符为特定的unsigned int变量赋值(对其他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; 
    } 
    } 
} 
+5

我们需要看代码或我们所能做的只是猜测。 – James 2011-01-27 23:04:37

回答

0

分配到一个unsigned int变量是不是你的问题的真正原因,我可以向你保证:)最有可能的,你在你的程序有一个缓冲区溢出其他地方。

相关问题