在地址0x处无法访问内存

时间:2016-01-26 13:35:57

标签: c++

我有这个项目,我必须创建一个对象社区(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初始化有问题吗?

1 个答案:

答案 0 :(得分:1)

cArray在creature_society :: creature_society

期间设置
creature **cArray=new creature * [n];

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