Создание очереди в C ++ - Что такое ошибка malloc? - PullRequest
0 голосов
/ 23 октября 2018

Я создаю простую очередь, однако получаю странную ошибку:

compile (46096,0x7fffb263d380) malloc: * ошибка для объекта 0x7f9c61c00340: освобожденный указатель не выделен * установить точку останова в malloc_error_break для отладки

Если я уменьшу количество методов постановки в очередь, я просто получу ошибку сегментации.

Мой основной класс:

#include <iostream>
#include "queue.h"
using namespace std;

template <typename ItemType>
void enqueue(const ItemType &i, node<ItemType>* &n, const long &p) {

    node<ItemType> *nn = new node<ItemType>;

    nn->item = i;
    nn->next = n;
    n = nn;
}

template <typename ItemType>
ItemType dequeue(node<ItemType>* &n) {

    ItemType fr;
    node<ItemType> *ptr;

    ptr=n;
    n = n->next;
    while(ptr->next != NULL){
        ptr = ptr->next;
    }

    fr = ptr->item;

    delete ptr;
    return fr;

}


int main() {

    node<int> *head;
    enqueue(13,head, 1);
    enqueue(10,head, 2);
    enqueue(18,head, 3);
    cout<<head->item<<"\t"<<head->next->item<<"\t"<<head->next->next->item<<endl;
    cout<<dequeue(head)<<"\t";
    cout<<dequeue(head)<<"\t";
    cout<<dequeue(head)<<endl;

    //cout<<dequeue(head)<<endl; // create error cathcing

}

Мой узелкласс оболочки:

#include <iostream>

template <typename ItemType>
struct node {
    ItemType item;
    node<ItemType> *next;
    int priority;
};

1 Ответ

0 голосов
/ 23 октября 2018

Вы делаете: node<int> *head; и затем ставите его в очередь с nn->next = n;

Это приводит к хранению нерасшифрованной памяти, а затем не удаляется при удалении.

Попробуйте node<int> *head = NULL;

...