这段代码来自于曾经的 Wolfenstein 3D项目 – 看看它有什么问题?
void CG_RegisterItemVisuals( int itemNum ) {
...
itemInfo_t* itemInfo;
...
memset( itemInfo, 0, sizeof( &itemInfo ) );
...
}
这里的Bug出现在memset那一行。
代码的真实意图是清空iteminfo这块内存,但调用memset时,第三个参数传入的却是sizeof(&iteminfo),sizeof操作符返回的是指针的大小(32bit),而不是itemInfo_t这个结构体的大小。
正确的写法是:
memset(itemInfo, 0, sizeof(itemInfo_t));
或者
memset(itemInfo, 0, sizeof(*itemInfo));