Ошибка компилятора C2541 - «удалить»: удалить: не может удалить объекты, которые не являются указателями - PullRequest
0 голосов
/ 14 апреля 2020

Я написал этот класс:

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;
};

И я делаю динамическое c выделение:

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);
}

Проблема заключается в том, что при попытке удалить выделение через д'тор он выдает ошибку:

введите описание изображения здесь

в чем может быть проблема? что мне не хватает?

Спасибо!

1 Ответ

0 голосов
/ 14 апреля 2020

когда вы выделяете n элементов в массиве, array[n] - это место, к которому вы не обращаетесь.

когда вы вызываете delete или delete[], оно хочет освободить где-то память, не из этого.

, поэтому

listNodeArr[numberOfElements].setNext(-1);

- это недопустимая позиция в вашем массиве класса StaticListNode, измените ее на

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

или что угодно в правильном месте между 0 и numberOfElements

...