【问题标题】:Unable to delete object array c++无法删除对象数组c ++
【发布时间】:2012-11-25 14:27:17
【问题描述】:

您好,我在删除对象数组时遇到问题。 每当我启动我的代码时,它工作得很好,但是当我关闭时, 我收到错误:0xC0000005:访问冲突读取位置 0xcccccccc。 代码如下:

我初始化一个对象的实例并立即从中创建一个空数组。

Class* classObject[15];

之后,我在 for 循环中定义了空数组。

for(int i = 0; i < 15; i++){
  classObject[i] = new Class();
}

当应用程序关闭时,下面的代码应该从内存中删除数组。

for(int i = 0; i < 15; i++){
  delete classObject[i];
}

我收到访问冲突错误,而不是成功关闭。 我该如何解决这个问题以及在哪里? 另外,还有其他方法可以在 for 循环中创建对象吗?

【问题讨论】:

  • 您是否已经释放了这些指针?或者将它们设置为NULL 或以其他方式更改指针?使用智能指针(例如std::shared_ptr可能可以缓解这个问题。
  • 对于此类问题,最好提供一个完整的示例来演示该行为。见sscce.org
  • 您可能已经通过一些较早的操作破坏了可用空间区域。另一种可能是你在 Class 的析构函数中做了坏事。
  • 如果您解决了问题,请发布答案并接受。答案不在问题中。

标签: c++ arrays oop instance


【解决方案1】:
class A
{
    public:
        A():a(0){};
    private:
        int a;
};

int main()
{
    A* arr[15];

    for(int i=0;i<15;i++)
    {
        arr[i] = new A();
    }
    for(int i =0;i<15;i++)
    {
        delete arr[i];
    }

    return 0;
}

我的代码没有任何错误。你之前删除了点吗?

【讨论】:

    猜你喜欢
    • 2021-07-15
    • 2018-11-13
    • 1970-01-01
    • 2016-04-01
    • 2016-07-25
    • 2021-10-07
    • 1970-01-01
    • 2016-04-12
    • 2018-10-02
    相关资源
    最近更新 更多