Skip to content

Latest commit

 

History

History
30 lines (26 loc) · 791 Bytes

bug403.md

File metadata and controls

30 lines (26 loc) · 791 Bytes

清空结构内存

找Bug

这段代码来自于曾经的 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));