Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26904
  • 博文数量: 8
  • 博客积分: 2099
  • 博客等级: 大尉
  • 技术积分: 85
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-04 14:23
文章分类

全部博文(8)

文章存档

2010年(4)

2009年(4)

我的朋友

分类: C/C++

2009-07-17 16:38:36

#include
using namespace std;
class Base
{
    //int hehe;
public:
    virtual void func() { cout << "base" << endl; }
};
class Ext : public Base
{
    //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;

    Base b[10];
    Ext  ex[10];
    test(b,10);
    test(ex,10);  //BUG
}
 
表面上可以运行,并且编译器安静的不提示一句话。。
但是当打开类中的数据定义部分的注释之后,程序崩溃~
 
理由:
打开类中的数据定义部分的注释之后,两个类的大小不一致,而pb[i]操作时是以基类的大小做递增操作;当传递派生类数组指针进去时,明显内存被粗暴的访问了。
阅读(682) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~