spa*_*ana 0 unsigned objective-c
我有这个代码:
unsigned int k=(len - sizeof(MSG_INFO));
NSLog(@"%d",k);
for( unsigned int ix = 0; ix < k; ix++)
{
m_pOutPacket->m_buffer[ix] = (char)(pbuf[ix + sizeof(MSG_INFO)]);
}
Run Code Online (Sandbox Code Playgroud)
问题是,当:
len = 0 and sizeof(MSG_INFO)=68;
k=-68;
Run Code Online (Sandbox Code Playgroud)
这个条件进入for循环并持续无限次.
你的代码说:unsigned int k.所以k不是-68,它是unsigned.这使得ka非常大,基于4字节int,它将是4294967210.这显然远远超过0,所以它会花费你的for循环一段时间来获得那么高,尽管它最终会终止.
你认为它是-86的原因是,当你用类似函数打印它时NSLog,它没有直接了解传入的参数,它决定了如何处理参数,基于格式字符串,作为第一个提供论点.
你在打电话:这个:
NSLog(@"%d",k);
Run Code Online (Sandbox Code Playgroud)
这告诉NSLog我们将参数视为一个signed int (%d).你应该这样做:
NSLog(@"%u",k);
Run Code Online (Sandbox Code Playgroud)
因此,NSLog将参数视为它的类型:unsigned (%u). 请参阅NSLog文档.
就目前而言,我希望你的缓冲区溢出,在循环运行时丢失内存,你的应用程序崩溃.
反思之后,我相信@FreeAsInBeer是正确的,你不想在这种情况下迭代for循环,你可以通过使用signed int来解决这个问题.然而,在我看来,你会更好,检查len > sizeof(MSG_INFO),如果不是这样处理不同的情况.我能想到的大多数情况,如果我没有为消息读取足够的信息,我不想在for循环后执行任何处理...