2014-02-02 2 views
-1

нашел много сообщений с этой ошибкой, но никто из них не помог. Я звоню в функцию, чтобы сохранить прочитанные книги, выпущенные клиентом с карты транзакций, а затем im считывая цену книг с карты BookDetails и сохраняя данные на карте customerBillList с вектором, умноженным на -1 как ключ, так что они расположены в порядке убывания (по возрастанию в отрицательном) ... но эта функция дает мне приведенную выше ошибку .. функцияОшибка сегментации (сбрасывается ядром) при использовании карты для хранения упорядоченных данных

void getCustomerBills(map<string, string> transactions,map<string, string> bookDetails, map<double, string> &customerBillList) 
{ 
     map<string, string>::iterator transactionsIterator = transactions.begin(); 
     for (; transactionsIterator != transactions.end(); ++transactionsIterator) 
     { 
      double customerBill = 0; 
      string customerID = transactionsIterator->first; 
      string transactionsString = transactionsIterator->second; 
      int length = transactionsString.length(); 
      for (int i = 0;i < length; ++i) 
      { 
      string book = ""; 
      while (transactionsString[i] != ',' and i < length) 
      { 
       book = book + transactionsString[i]; 
       ++i; 
      } 
      map<string, string>::iterator iteratorBookDetails = bookDetails.find(book); 
      string bookCost = ""; 
      string bookDetailsString = iteratorBookDetails->second; 
      for (int j = 0; j<bookDetailsString.length() and bookDetailsString[j] != ',' ; ++j) 
      { 
       bookCost = bookCost + bookDetailsString[j]; 
      } 
      customerBill = customerBill + atof(bookCost.c_str()); 
      } 
      if (customerBillList.count((customerBill)* -1) == 0) 
      customerBillList[(customerBill)* -1] = customerID; 
      else 
      customerBillList[(customerBill)* -1] = customerBillList[(customerBill)* -1] + "," + customerID; 
     } 
} 

делать некоторые тыкать я узнал, что значение двойного customerBill продолжает изменяться сама по себе каждый раз, когда транзакция итератор петли ...

здесь карты только в случае, если вам нужно их сделки:

Key Value 
    C12397 P342,P8,P563,P456 
    C3452 P546,P8,P673,P675 
    C1238 P1 
    C12397 P8,P673,P4 

bookDetails:

key Value 
P342 500,Black Holes and Baby Universes 
P8 90,Love in the time of Cholera 
P675 23,Number Theory and Cryptography 
P563 1000,Lord of the Rings ­ Box Set 
P456 12,Da Vinci Code 
P546 20,Linux Device Drivers 
P673 45,The Great Indian Novel 
P1 34,Predictably Irrational 
P42 44,The Hitchhiker’s Guide to the Galaxy 
P99 99,Problems in Physic 

ли кто-нибудь увидеть, что проблема здесь? любая помощь будет оценена ..

+0

Возможно, нам известно, какая строка кода возникает ошибка –

+0

Ошибка сегментации не дает номера строки и im, используя онлайн-компилятор, поэтому на самом деле не использовать точки останова .. если бы я знал, что, вероятно, решил бы проблему ..: ( – Pundit

+0

Вот почему у нас есть отладчики –

ответ

2

Вы не проверяя результат:

map<string, string>::iterator iteratorBookDetails = bookDetails.find(book); 

можно увидеть в примере вы дали, что нет ни одной записи в bookDetails для P4. Это означает, что вышеупомянутая строка вернет bookDetails.end(). Позже, когда вы попытаетесь получить доступ к значениям, указанным iteratorBookDetails, вы обязательно потерпите крах.

+0

эй большое спасибо, что удалила ошибку. – Pundit

+0

@Pundit BTW, а как насчет мультимапа? – laune

+0

@laune я действительно не вижу, как это изменится .. вы можете уточнить? – Pundit

Смежные вопросы