C ++, как я могу решить ошибку ключевого слова «удалить»? - PullRequest
0 голосов
/ 15 ноября 2018

Извините за мой английский.

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

delete ord [i] -> foods; Я думаю, что это вызвало ошибку msg. Содержание ошибки, как показано в приложенном img. Что я делаю не так?

enter image description here

1 Ответ

0 голосов
/ 15 ноября 2018

Вы не показали достаточный код, но почти наверняка Order::foods - это указатель, полученный с помощью array-new (operator new[]), или он никогда не был выделен, но не является NULL (висячий / неинициализированный).

Вы всегда должны правильно сопоставлять новые / удаляемые вызовы:

  • , если вы присвоили new, затем отпустите с delete: например,

    Menu *m = new Menu;
    delete m;
    
  • если вы присвоили new[], затем отпустите с delete[]: например,

    Menu *m = new Menu[10];
    delete[] m;
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...