コードに問題があります。
特定の関数でのみ優先キューの先頭にアクセスできないようです。
このエラーが発生します:
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;
}`