클래스 A의 요소가있는 우선 순위 대기열이 있습니다.이 대기열의 요소가 필요합니다 (대기열의 우선 순위가 낮을 수 있음). 그래서, 제가 선택한 요소를 얻을 때까지 몇 가지 요소를 팝업하려고합니다. 일단 내가 선택한 요소를 얻으면 배열에 임시 저장된 모든 요소를 밀어 넣을 계획입니다. 나는 루프를 가지고 있으며, 반복 될 때마다 큐에 들어가서 내가 터진 요소가 내 선택인지 확인합니다. 이렇게하면 임시 배열에 더 많은 데이터가 있습니다. 문제는이 임시 배열에서 우선 순위 큐로 데이터를 다시 푸시하려고 할 때 발생합니다. 우선 순위의 기본 컨테이너는 벡터이고 디버깅은 문제가 std_queue.h에 std :: push_heap (c.begin(), c.end(), comp) 행에 있음을 보여줍니다. (c는 벡터입니다)우선 순위 대기열을 사용하는 중 세그먼트 오류
나는 이것이 잘못된 방법일지도 모르고 아마도 malloc 대신 생성자를 사용해야하며 우선 순위 대기열 대신 std : list를 가지고 있어야하지만 어떤 것이 나에게 알려줄 수 있는지 여기에 ?
while(count < length_of_queue) // Iterate over all elements of queue
{
A* temp_array = (A *)malloc(count * sizeof(A));;
for (int i = 0;i<count;i++) // remove count number of elements from queue
{
temp_array[i] = priority queue.top();
priority queue.pop(); // free_list is the priority queue
}
A check_element = free_list.top(); // Check if (count+1)th elements satisfies our
// criteria
if (criteria_satisfied)
{
priority_queue.pop();
//freeing the temp_array and pushing back all the elements from temp_array into
// priority_queue like done in the else condition
return check_element;
}
else
{
for (int i = 0;i<count;i++) // Push back all the elements popped until now
{
priority_queue.push(temp_array[i]); // Offending line
}
free (temp_array);
}
count++
}
도움을 얻는 가장 좋은 방법은 문제를 보여주는 독립된 코드 조각을 제공하는 것입니다. 이 코드는 이러한 요구 사항을 충족시키지 않기 때문에 사용자가 제공 한 코드에 문제가 없기 때문에 사용자가 묻는 것을 어렵게 만들 수 있습니다. –
malloc을 벡터로 바꾸십시오. 위의 코드는 매우 심하게 누출됩니다. –
반환하기 전에 (local_bd_arr)을 비우지 마십시오. 또한 돌아 오기 전에 물건을 뒤로 밀지 마십시오. –