编译器错误C2541-'delete':delete:无法删除不是指针的对象

问题描述 投票:0回答:1

我写了这堂课:

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删除分配时,它给了我error

可能是什么问题?我想念什么?

谢谢!

c++ visual-studio compiler-errors dynamic-memory-allocation delete-operator
1个回答
0
投票

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

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

so

listNodeArr[numberOfElements].setNext(-1);

在类StaticListNode的数组中是无效位置更改为

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

或任何在0numberOfElements之间正确的位置

© www.soinside.com 2019 - 2024. All rights reserved.