BUIW 里面的一个BUG!
最近研究BUIW,发现里面存在的一个bug:
函数 ImageStaticWidget_New 里面这一行:
ImageStaticWidget *me = MALLOCREC_VTBL(ImageStaticWidget, IWidget);
这里分配内存的虚表应该是 IPropContainer 而不是 IWidget,因为Container
作为一个 Widget,虚表是不需要分配内存的,其成员 vtWidget 用来保存Widget
的虚表,而需要分配内存的是 IContainer 的虚表;
这样一个bug为什么不会出现问题呢?原因就是 IWidget 虚表大于 IContainer 虚表,
分配出来的内存足以存放 IContainer 虚表,因此除了一点内存浪费,不会出现其他问题!
应该改为:
ImageStaticWidget *me = MALLOCREC_VTBL(ImageStaticWidget, IPropContainer);