1

Тема: Виправлення помилки в пріоритетній черзі

Вивчаю пріоритетну чергу і написав код для додавання елементу, але елемент не додається, а програму викидує з помилкою. Не можу зрозуміти в чому проблема.
Буду вдячний, якщо допоможете дізнатись в чому проблема

#include <iostream>
using namespace std;


struct Queue {
    int *priority;
    int front = -1;
    int back = -1;
    int *array;
};



void Add(int value, Queue *queue, int priority) {
    if (queue->front == -1) {
        queue->front = queue->back = 0;
        queue->array[queue->front] = value;
        queue->priority[queue->front] = priority;
    }
    else {
        for (int i = queue->back; i >= queue->front; i--) {
            if (priority > queue->priority[i]) {
                queue->array[i + 1] = queue->array[i];
                queue->priority[i + 1] = queue->priority[i];
            }
            else {
                break;
            }
            queue->array[i + 1] = value;
            queue->priority[i + 1] = priority;
            queue->back++;
        }
    }
}


int main() {
    Queue *queue = new Queue;
    Add(1, queue, 8);
    Add(2, queue, 4);
    Add(3, queue, 3);

    delete[] queue;
    system("pause");
    return 0;
}

2 Востаннє редагувалося koala (10.06.2019 15:59:07)

Re: Виправлення помилки в пріоритетній черзі

struct Queue {
    int *array;//array - вказівник масив int-ів (чи один int, але, гадаю, таки масив)
};
...
    if (queue->front == -1) { 
        queue->front = queue->back = 0;
        queue->array[queue->front] = value;//а куди в цьому місці вказує array? Де там виділялася пам'ять?

Ну і раджу дотримуватися принципу RAII: всі new - в конструкторі, всі delete - в деструкторі. А ще краще - використовувати стандартні типи, які вже дотримуються цього принципу.