c++ - 无法访问地址为 0x 的内存

标签 c++

我有这个项目,我必须创建一个对象社会(creatures),这是一个单独的对象。我试图通过在 creature_society 的构造函数中初始化指向对象 creature 的指针数组来做到这一点(好的和坏的生物是继承类生物的类摘要)

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 在 creature_society::creature_society 期间设置

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

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

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

相关文章:

python - while (cin >> var) 在 python 中的等价物是什么?

c++ - 如何在 Map 中存储集合容器的迭代器列表

具有多重继承的 C++ 类型转换

c++ - 如何在 C++ 中创建一个适用于 Windows 和 Linux 的文件夹(目录)

c++ - 使用 Eigen C++ 库进行模板编程时出现编译错误

c++ - 哪种字符串查找算法适用于此?

c++ - HashMap 和 vector 很慢

c++ - 没有调用复制构造函数?

C++ 构造函数——通过引用传递仅适用于 const。为什么?

c++ - 从设备管理器获取蓝牙低功耗设备的连接状态