0

我的代码有一些问题。

似乎我只能在特定功能中访问优先级队列的顶部。

我收到此错误:

Unhandled exception at at 0x77644B32 in ConsoleApplication5.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x00D7E6A8.

让我举个例子更清楚一点:

如果我做一个

cout << *nameofmyqueue->top() ;在一个名为它的函数中firstFunction,它会完美地工作。但如果我在 中使用它otherFunction,我会得到一个访问内存错误。这是我的代码:(这里有评论它有效,而它没有)

没有问题

void Ordinateur::addmessageAEnvoyer(Message* message){

不适用于

void Ordinateur::envoiMessages(){

任何想法为什么它不起作用?

非常感谢 !

#ifndef _ORDINATEUR_H_
#define _ORDINATEUR_H_

#include "PrioriteMessage.h"
#include "Reseau.h"
#include "Message.h"
#include <queue>
#include<iostream>

using namespace std;


class Ordinateur
{
public:
    Ordinateur();
    Ordinateur(string nom,int adresse,Reseau* adresseReseau);
    ~Ordinateur();

    int getAdresse() const; 
    string getNom()const;
    Reseau* getAdresseReseau() const;


    void addmessageAEnvoyer(Message* message);
    void envoiMessages();
    void recoiMessages(Message* messageRecu);
    void afficherMessagesRecus();
    void afficherOrdinateur(ostream& ostr);
    friend ostream& operator<< (ostream& ostr, Ordinateur& ordinateur );

private:
    int adresse_; 
    string nom_;
    Reseau* adresseReseau_;
    priority_queue<Message*,vector<Message*>,PrioriteMessages> listMessagesAEnvoyer_;
    vector<Message*> messagesRecus_;
};

#endif







`#include"Ordinateur.h"

#include <queue>


Ordinateur::Ordinateur(){
    nom_ = "default";
    adresse_ =  0;
}

Ordinateur::Ordinateur(string nom,int adresse,Reseau* adresseReseau){
    nom_ = nom;
    adresse_ =  adresse;
    adresseReseau_ = adresseReseau;
}

Ordinateur::~Ordinateur()
{
}


int Ordinateur::getAdresse()const{
    return adresse_;
}
string Ordinateur::getNom()const{
    return nom_;
}
Reseau* Ordinateur::getAdresseReseau() const{
    return adresseReseau_;
}



void Ordinateur::addmessageAEnvoyer(Message* message){
    listMessagesAEnvoyer_.push (message);
cout << *listMessagesAEnvoyer_.top(); // NO PRPOBLEM HERE
}


void Ordinateur::envoiMessages(){

    cout << *listMessagesAEnvoyer_.top(); // PROBLEM HERE
    while(!listMessagesAEnvoyer_.empty())
    {

        if (listMessagesAEnvoyer_.top()->getnomDestinataire ()!= "0"){
            adresseReseau_->envoiMessageNom(*listMessagesAEnvoyer_.top(),listMessagesAEnvoyer_.top()->getnomDestinataire ());
        }
        else if (listMessagesAEnvoyer_.top()->getnomDestinataire() == "0")
            adresseReseau_->envoiMessageTous(*listMessagesAEnvoyer_.top());

        listMessagesAEnvoyer_.pop();

    }
}

void Ordinateur::recoiMessages(Message* messageRecu){

    cout << nom_ << " #"<< adresse_<<" " <<" Reception d'un message.."<< endl;
    messagesRecus_.push_back (messageRecu);


}

void Ordinateur::afficherOrdinateur (ostream& ostr){
    ostr << nom_ << " #"<< adresse_<<" ";

}

void Ordinateur::afficherMessagesRecus(){
    cout << nom_ << " #"<< adresse_<<" Affichage des messages recus ("<<messagesRecus_.size ()<<"):"<<endl;
    for (unsigned int i = 0; i < messagesRecus_.size (); i++)
    {
        cout << messagesRecus_[i]<<endl;
    }

}




ostream& operator<<( ostream& ostr, Ordinateur& ordinateur ){

    ordinateur.afficherOrdinateur (ostr);
    return ostr;
}`
4

1 回答 1

0

不是真正的答案,而是更多的建议,有望解决您的问题。

鉴于您没有发布 main(...) 或您如何管理消息的生命周期,我建议将消息​​更改为 std::shared_ptr - 这有望使您的问题消失。它还将确定您何时可以删除消息成为非问题。

于 2013-03-29T06:56:09.710 回答