#include
using namespace std;
using namespace std;
class Base
{
//int hehe;
public:
virtual void func() { cout << "base" << endl; }
};
{
//int hehe;
public:
virtual void func() { cout << "base" << endl; }
};
class Ext : public Base
{
//int haha;
//int wuwu;
public:
virtual void func() { cout << "ext" << endl; }
};
{
//int haha;
//int wuwu;
public:
virtual void func() { cout << "ext" << endl; }
};
void test(Base *pb, int len)
{
int i;
for(i=0; i
pb[i].func();
}
}
int main()
{
cout << sizeof(Base) << "," << sizeof(Ext) << endl;
{
cout << sizeof(Base) << "," << sizeof(Ext) << endl;
Base b[10];
Ext ex[10];
test(b,10);
test(ex,10); //BUG
}
test(ex,10); //BUG
}
表面上可以运行,并且编译器安静的不提示一句话。。
但是当打开类中的数据定义部分的注释之后,程序崩溃~
理由:
打开类中的数据定义部分的注释之后,两个类的大小不一致,而pb[i]操作时是以基类的大小做递增操作;当传递派生类数组指针进去时,明显内存被粗暴的访问了。