Как проверить причину «Выражение: несовместимость итераторов списка», показанную в «Библиотеке времени выполнения MicrosC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как проверить причину «Выражение: несовместимость итераторов списка», показанную в «Библиотеке времени выполнения Micros

Сообщение Anonymous »


Реальный вопрос: как использовать отладчик для проверки причины сообщения «Выражение: список итераторов несовместим»? Я не хочу, чтобы кто-то редактировал мой код, я хочу получить информацию для обработки логических ошибок.

В каких ситуациях возникает эта ошибка?: длинный текст под этим предложением.

что я сделал?: проверяю память с помощью cout вот так...

if (i != free_list.end()) { //для отладки cout start_address; если (i->размер == размер) я = free_list.erase(я); else { // i->размер > размер я-> размер - = размер; я-> начальный_адрес += размер; } ток = я; вернуть начальный_адрес; } если (++i == free_list.end()) я = free_list.begin(); } Пока (я != текущий); вернуть -1; } недействительный NextFit() { список free_list; список alloc_list; free_list.push_back(FREE_NODE{0, MEMORY_SIZE}); очередь request_queue; bool input_end = ложь; интервал часов = 0; интервал num_of_requests = 0; int total_return_time = 0; интервал total_wait_time = 0; int total_request_size = 0; длинный длинный total_request_timespace = 0; MEMORY_REQUEST г-н; автоматический ток = free_list.begin(); для (;; ++часы) { // Возвращаем память в конце времени использования for (auto it = alloc_list.begin(); it != alloc_list.end();) если (it->end_time> часы) это++; еще { Return_Memory(free_list, it->start_address, it->size); total_return_time += часы - it->arrive_time; это = alloc_list.erase (оно); } интервал req_size; интервал use_time; // Получение новых запросов к памяти если (ложь == input_end) while (true == mr.GetMemoryRequest(lock, &req_size, &use_time, &input_end)) { request_queue.push(UNALLOCATED_REQUEST{часы, req_size, use_time}); количество_запросов++; total_request_size += req_size; total_request_timespace += req_size * use_time; } // проверяем условия выхода if ((true == input_end) && (request_queue.size() == 0) && (alloc_list.empty() == true)) перерыв; // Проверяем очередь запросов, проверяем, доступна ли память while (request_queue.empty() == false) { auto& req = request_queue.front(); int start_address = try_alloc_NextFit (free_list, req.size, current); если (-1 == начальный_адрес) перерыв; total_wait_time += часы - req.arrive_time; if (текущий != free_list.end() && текущий->начальный_адрес size: 512, i->start_address: 0 //пустая память, поэтому запросите 2-й размер памяти. i->size: 510, i->start_address: 2 //назначен 2(0+2=2) размер памяти, поэтому запросите 2 размера памяти i->size: 508, i->start_address: 4 //назначен 2(2+2=4) размер памяти, поэтому запросите 7 размер памяти i->size: 501, i->start_address: 11 //назначен размер памяти 7(4+7=11), поэтому запросите размер памяти 263 i->size: 238, i->start_address: 274 //назначен размер памяти 263, поэтому запросите размер памяти 167 i->size: 71, i->start_address: 441 //назначен размер памяти 167, поэтому запросите размер памяти 460 // и это не ожидаемая ошибка. i->size: 7, i->start_address: 4 // 441 + 460 = общий объем памяти (512). так что этот результат неверен. i->size: 71, i->start_address: 441 // ??? я-> размер: 7, я-> начальный_адрес: 4 я-> размер: 71, я-> начальный_адрес: 441 я-> размер: 7, я-> начальный_адрес: 4 Выражение: несовместимые итераторы списка
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Использование менеджеров контекста Async и асинхронных итераторов в библиотеке Async в Python
    Anonymous » » в форуме Python
    0 Ответы
    63 Просмотры
    Последнее сообщение Anonymous
  • Есть ли способ изменить версию Java, показанную в команде Doctor Flutter Doct?
    Anonymous » » в форуме JAVA
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Есть ли способ изменить версию Java, показанную в команде Doctor Flutter Doct?
    Anonymous » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Создание поддиапазона std из итераторов архива повышения
    Гость » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Гость
  • Создание поддиапазона std из итераторов архива повышения
    Anonymous » » в форуме C++
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»