【问题标题】:Compiler Error C2541 - 'delete' : delete : cannot delete objects that are not pointers编译器错误 C2541 -“删除”:删除:无法删除不是指针的对象
【发布时间】:2020-07-26 23:27:53
【问题描述】:

我写了这门课:

class StaticList
{
   private:
   int      headFree;
   int      headList;
   int      locNew;
   StaticListNode* listNodeArr;

   public:
   StaticList(int numberOfElements);
   ~StaticList();

   void addToStaticList(int ComputerNum);
   int getHeadList();
   int getHeadFree();
   StaticListNode* getListNodeArr();
   void show() const;
};

我进行了动态分配:

StaticList::StaticList(int numberOfElements)
{
   headFree = 1; //Because the first headFree is 1 (the 0 cell is dummy)
   headList = -1;
   locNew = -1;

   this->listNodeArr = new StaticListNode[numberOfElements];

   for (int i = 0; i < numberOfElements - 1; i++) 
       listNodeArr[i].setNext(i + 1);

   listNodeArr[numberOfElements].setNext(-1);
}

问题是当我尝试通过 d'tor 删除分配时,它给了我错误:

enter image description here

可能是什么问题?我错过了什么?

谢谢!

【问题讨论】:

  • 你能给我们StaticListNode的会员吗?
  • class StaticListNode的成员是:int next, data。
  • 确保你在析构函数中使用delete[] this-&gt;listNodeArr;,而不仅仅是delete this-&gt;listNodeArr
  • 也许next 应该有StaticListNode* 类型?它是到下一个节点的链接吗?在您的实现中,您不能在next 上调用delete,因为它不是指针
  • 当你为numberOfElements 分配元素时,listNodeArr[numberOfElements].setNext(-1); 对你来说是一个无效的地方。将其更改为[numberOfElements -1]

标签: c++ visual-studio compiler-errors dynamic-memory-allocation delete-operator


【解决方案1】:

当您为数组中的 n 个元素分配时,array[n] 是您无法访问的某个地方。

当您调用 deletedelete[] 时,它想释放不属于它的内存。

所以

listNodeArr[numberOfElements].setNext(-1);

在您的 StaticListNode 类数组中的位置无效 改成

listNodeArr[numberOfElements - 1].setNext(-1);

或在0numberOfElements 之间的正确位置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-09
    • 2013-02-11
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2012-09-10
    • 2011-02-18
    • 2011-05-02
    相关资源
    最近更新 更多