C ++,我该如何解决关键字“删除”错误?

时间:2018-11-15 06:54:15

标签: visual-c++

对不起,我的英语。

struct Menu{
   int fno;
   string fname;
   int price;
};

struct Order {
   int table; 
   int fcnt; 
   Menu *foods;
   int *qty;   
   int ord_price;  
   bool checked = false; 

};

void del_order(Order *ord[], int &pos) {
   int table, loc;
   cout << "* table(1-10) : "; cin >> table;
   for (int i = 0; i < pos; i++) {
      if (ord[i]->table == table) {
         if ((ord[i]->checked)) {
             cout << "cannot delete.\n";
             return;
         }
         loc = i;
         delete ord[i]->foods;  <---- this errors!!.
         delete ord[i]->qty;
      }
   }
   delete ord[loc];
   pos--;
   for (int i = loc; i < pos; i++)
       ord[i] = ord[i + 1];
}

删除ord [i]-> foods ;我认为这导致了msg错误。 错误的内容如附件img中所示。 我在做什么错了?

enter image description here

1 个答案:

答案 0 :(得分:1)

您没有显示足够的代码,但是几乎可以肯定Order::foods是通过 array-new operator new[])获取的指针,或者它从未分配但不是-NULL(悬空/未初始化)。

您必须始终正确匹配新呼叫/删除呼叫:

  • 如果您分配了new,然后释放了delete例如

    Menu *m = new Menu;
    delete m;
    
  • 如果您分配了new[],然后释放了delete[]例如

    Menu *m = new Menu[10];
    delete[] m;
    
相关问题