Как проверить причину «Выражение: несовместимость итераторов списка», показанную в «Библиотеке времени выполнения Micros ⇐ C++
Как проверить причину «Выражение: несовместимость итераторов списка», показанную в «Библиотеке времени выполнения Micros
Реальный вопрос: как использовать отладчик для проверки причины сообщения «Выражение: список итераторов несовместим»? Я не хочу, чтобы кто-то редактировал мой код, я хочу получить информацию для обработки логических ошибок.
В каких ситуациях возникает эта ошибка?: длинный текст под этим предложением.
что я сделал?: проверяю память с помощью 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 Выражение: несовместимые итераторы списка
Реальный вопрос: как использовать отладчик для проверки причины сообщения «Выражение: список итераторов несовместим»? Я не хочу, чтобы кто-то редактировал мой код, я хочу получить информацию для обработки логических ошибок.
В каких ситуациях возникает эта ошибка?: длинный текст под этим предложением.
что я сделал?: проверяю память с помощью 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 Выражение: несовместимые итераторы списка
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Есть ли способ изменить версию Java, показанную в команде Doctor Flutter Doct?
Anonymous » » в форуме JAVA - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Есть ли способ изменить версию Java, показанную в команде Doctor Flutter Doct?
Anonymous » » в форуме JAVA - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-