gpt4 book ai didi

c++ - 为无符号整数赋值时出现运行时错误

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:53 26 4
gpt4 key购买 nike

我刚刚遇到一个非常奇怪的问题。当我尝试为特定的 unsigned int 变量赋值时(其他 unsigned int 变量没有问题),无论是使用 memcpy 还是 = 运算符,程序都会因运行时错误而崩溃。它并不总是发生在一个程序运行时,但它总是在我运行第二个实例时发生。我通过注释掉不同的东西彻底检查了代码,所以我很确定值分配是问题所在。

非常感谢。

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;
}
}
}

最佳答案

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

关于c++ - 为无符号整数赋值时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4822987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com