【问题标题】:c++ use & to create pointer member from objects in array [error]c ++使用&从数组中的对象创建指针成员[错误]
【发布时间】:2016-01-21 17:02:58
【问题描述】:

您好,很抱歉,这应该不是一个难题。我试图让指针在数组中调用该对象函数。块 ID 是关键,但我似乎无法让它运行。

blocks* objects[28];
int index = 0;
    for (int i = 0; i < 6; i++)
    {
        for (int j = i + 0; j < 6; j++)
        {
            objects[index] = new blocks(key, i, j);
            key = key + 1;  //used to make sure each block can id with a key
            index = index + 1;
        }
    }

    for (int i = 0; i < 28; i++)
    {
        double id = objects[i]->getblockid(); //FIXED
        cout << "Object is: " << i << " id is: " << id << endl;
    }

【问题讨论】:

  • 错误是什么?顺便说一句,objects[i]-&gt;getblockid; 似乎不对,除非它是公共成员。
  • 在我看来,您只是在初始化数组的前六个元素。
  • 是的,这就是我需要一个指针“&”的错误
  • 请在您的问题中提供确切的错误消息
  • 每次通过j 循环,您都会覆盖objects[i],从而导致之前分配的块的对象泄漏。

标签: c++ arrays function object


【解决方案1】:

您是说您的代码无法编译吗?对我来说似乎很好。

但是我可以看到运行时出现一些问题。

首先,在内部循环中,您将实例化块对象 21 次,但您仅对该数组的前 6 个元素进行操作。因此,当您在最后一个循环中从 0 迭代到 28 时,您会从第 7 次开始抛出异常,并且不会实例化更多元素。这是因为该数组的第 7 个元素未实例化。它指向一些内存位置,这只是一个垃圾。

另一个问题是当你覆盖你的指针时,你会丢失创建对象的信息,这会导致内存泄漏。或许您应该熟悉一下智能指针的概念?

使用 std::vectors 而不是 vanila 数组。或者使用std::array

您还应该熟悉迭代器的概念。

【讨论】:

  • “这对我来说似乎很好。” 你怎么能从不完整的样本中知道呢?此外,虽然您的建议很好,但这并不是非问题的真正答案。
  • 我猜你需要块类,它必须有 double 类型的公共变量。所以我添加了它。您也可以从代码中推断出 Block 的 ctor。是的,这是一个猜谜游戏。
  • 请不要猜测不清楚的问题。获得足够的代表发表评论以要求澄清(获得 50 并不难)。
猜你喜欢
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
相关资源
最近更新 更多