我有这个项目,我必须创建一个对象社会(creatures),这是一个单独的对象。我正在尝试通过初始化指向creature的构造函数中的对象creature_society的指针数组来实现此目的(好坏生物是继承抽象类生物的类)

creature_society::creature_society(int n, int L, int good_thrsh, int bad_thrsh)
{
  int a;
  creature **cArray = new creature * [n];
  gthrsh = good_thrsh;
  bthrsh = bad_thrsh;

  for(i = 0; i < n; i++)
  {
    a = rand() % 2 ;
    if(a == 1)
      cArray[i] = new good_creature(L, i);
    else
      cArray[i] = new bad_creature(L, i);

    cout<< "\nhp is "<< cArray[i]->gethp() << "\n" << endl;
  }
}


一切正常,创建了生物社会并创建了生物,但是当我尝试通过生物类函数例如更改cArray[i]的值时

void creature::bless()
{
  if(!is_a_zombie())
    hp++;
}


我遇到细分错误,并收到消息

cannot access memory at address 0x..


所以我的问题是,为什么我要得到它? cArray初始化有问题吗?

最佳答案

cArray是在bios_society :: creature_society中设置的

creature **cArray=new creature * [n];


在此方法之外,您无法访问此变量。如果您还有另一个(全局?)变量cArray,则该变量将不会更改,并且可能保持在0值,因此指向地址0x。

关于c++ - 无法访问地址0x的内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35015063/

10-16 15:45