【问题标题】:How to delete an element from custom array如何从自定义数组中删除元素
【发布时间】:2011-11-30 10:47:22
【问题描述】:

这是我下面的代码

Box **b = 0;
//memory allocated for elements of rows.
b = new Box *[ROWS] ;

//memory allocated for  elements of each column.
for( int i = 0 ; i < ROWS ; i++ )
    b[i] = new Box[COLUMNS];       

b[0][0] = NULL;

为什么我在最后一行代码出现错误提示:“没有可行的重载 '='”。

【问题讨论】:

  • +1 用于实际使用数组 delete[] ,即使您将其他大部分内容搞混了 :)
  • 当您写入未分配的内存时,最后一行可能会给您一个运行时错误。
  • 我还没见过这么乱的代码:/
  • 对不起,我编辑了我的代码。这应该是对的

标签: c++ arrays


【解决方案1】:

您的代码中有一些错误。首先,当你的类型是Box时,为什么要分配int?这应该分别是b = new Box *[ROWS]b[i] = new Box[COLUMNS];

另外,您正在尝试设置一个内存位置,该位置您之前已使用 delete 释放,这很危险,可能会导致无法预料的后果。

这一行

b[0][0] = NULL;

不可能,因为您在b[0][0] 的类型不是Box* 而是Box

【讨论】:

    【解决方案2】:

    new int* 将返回一个int**。编译器抱怨此int** 无法转换为Box**b 的类型)。

    【讨论】:

      【解决方案3】:

      您声明了一个 Box 的锯齿状数组,但分配了 new int*[] - 那里发生了什么?

      b[0][0] 的类型也是 Box&amp;。你不能分配NULL,除非

      • Box::Box 有一个隐式构造函数,其参数类型为 NULL 可转换的类型
      • Box::Box 定义了一个赋值运算符重载,采用这样的参数

      【讨论】:

        【解决方案4】:

        你没有在类 Box 中重载'='

        【讨论】:

          【解决方案5】:
          b[0][0] = NULL;
          

          这是错误的,原因有两个:

          • b[0][0] 指的是对象类型Box(因为bBox**,所以b[0]Box*)。您正在尝试为其分配一个指针,这是一个错误(除非 Box 可以从指针转换)。
          • 您刚刚删除了b 指向的内存,因此取消引用无论如何都是错误的。

          只需删除该行。根据您之后计划对b 执行的操作,分配b = NULL 以避免悬空指针可能是有意义的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-27
            相关资源
            最近更新 更多