#include <iostream> 
using namespace std; class A 

private:
void* pObject;
public: 
A() 

pObject = this;
cout<<"A: pObject = "<<pObject<<endl; 

void*  GetObjectPtrFromA(){return pObject;}
}; class B

private:
void* pObject;
public: 
B() 

    pObject = this;
cout<<"B: pObject = "<<pObject<<endl; 

void*  GetObjectPtrFromB(){return pObject;}
}; class F:public B, public A

private:
void* pObject;
char* p;
public: 
F() 

pObject = this;
cout<<"F: pObject = "<<pObject<<endl; 

void*  GetObjectPtrFromF(){return pObject;}
void AllocateMemoryF()
{
cout<<"调用AllocateMemoryF函数"<<endl; 
p = new char[1024*1024*1024];
}
void FreeMemoryF()
{
cout<<"调用FreeMemoryF函数"<<endl; 
delete[] p;
}
}; int main() 

F f; 
F* pf;
pf = (F*)f.GetObjectPtrFromA();
pf->AllocateMemoryF();
pf->FreeMemoryF();
}

解决方案 »

  1.   

    to: jasonjixiang(吉祥)有错,你在 AllocateMemoryF 函数中把new指定的字节量再增大些试试。
      

  2.   

    to zhpzh(求新) 
     那不是你的程序的错,调用NEW操作符时,有可能是要失败的,如果你申请的空间太大,有可能就要失败的。
      

  3.   

    new操作申请的内存过大,此时申请失败的几率也很大。
      

  4.   

    pf = (F*)f.GetObjectPtrFromA();
    这句话有点迷惑
    将A的对象指针this 强制转换为F的?为什么 会有后遗症吗?
    高手说说
      

  5.   

    to Anikan(皮皮鱼):
    to goodboyws(深夜不眠者):
    申请一个字节也出错,除非不申请。
    -----------------
    to  laolaoliu2002(老刘):
    我用的就是VC6.0编译器。
      

  6.   

    在进程堆栈中分配空间是有大小限子的,不能想分多大就多大!
    另一:
    pf = (F*)f.GetObjectPtrFromA();
    取得的是A在F中的指针
    这个指针并不完全等于F,看你多重继承的顺序
    如果
    class F:public B, public A
    换为
    class F:public A, public B
    应该可以解决!