c++ - 动态分配对象数组

标签 c++ arrays dynamic new-operator

我需要一个 DizzyCreature 类型(我的类)的双指针来指向 DizzyCreature 指针数组。当我运行它时,我得到“访问冲突读取位置 0x...”。我可以创建一个 DizzyCreature* 并调用它的成员函数,但是当无法运行数组并对每个 obj 执行相同的操作时。

我正在遵循以下说明: http://www.cplusplus.com/forum/beginner/10377/

代码

服务器.h:

class Server
{
 public:
  Server(int x, int y, int count);
  ~Server(void);

  void tick();


 private:
  DizzyCreature** dcArrPtr;
  DizzyCreature* dcPtr;

  int _count;
};

服务器.cpp:

Server::Server(int x, int y, int count)
{
  dcPtr = new DizzyCreature[count];       // this works just fine

  dcArrPtr = new DizzyCreature*[count];   // this doesn't (but gets past this line)
  _count = count;
}

Server::~Server(void)
{
  delete[] *dcArrPtr;
  delete[] dcPtr;
}

void Server::tick()
{
  dcPtr->takeTurn();                // just fine

  for (int i = 0; i < _count; i++) {
    dcArrPtr[i]->takeTurn();        // crash and burn
  }
}

编辑: 成员函数takeTurn()位于DizzyCreature的父类中。程序将其放入函数中,但是一旦它尝试更改私有(private)成员变量,就会抛出异常。如果重要的话,DizzyCreature 属于 GameCreature 和 WhirlyB 类型,因为这是 MI 上的作业。

最佳答案

您已经为dcArrPtr分配了空间,但没有分配该数组中的每个对象。您必须执行以下操作:

Server::Server(int x, int y, int count)
{
  dcPtr = new DizzyCreature[count];

  dcArrPtr = new DizzyCreature*[count];
  for ( int i = 0; i < count; i++ ) {
    dcArrPtr[ i ] = new DizzyCreature;
  }
  _count = count;
}

Server::~Server(void)
{
  for ( int i = 0; i < count; i++ ) {
    delete dcArrPtr[ i ];
  }
  delete[] *dcArrPtr;
  delete[] dcPtr;
}

关于c++ - 动态分配对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9503718/

相关文章:

c++ - 在 c++ 中传递内联临时类需要是 const。如何解决这个问题

c - 字符数组有问题?

将泛型添加到动态集合时的 ​​C# 怪异行为

scala - 如何使用特征聚合 akka-http 路由?

c++ - 在这种情况下如何使 shared_ptr 线程安全?

c++ - 在代码体内定义仿函数

c++ - 为什么用g++编译时会出现符号引用错误?

arrays - 将更改后的数组重置为其原始值 Swift

arrays - 将二维数组公式输出为格式化字符串

linq - Linq to Entities中的动态where子句