Priority_queue problems Memory access
Priority_queue problems Memory access
我的代码有一些问题。
似乎只能在特定函数中访问优先级队列的顶部。
我得到这个错误:
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;
}`
不是真正的答案,但更多的是一个建议,希望能解决你的问题。
鉴于您没有发布主(…)或您如何管理消息的生命周期,我建议将消息更改为std::shared_ptr -这将有希望使您的问题消失。它还可以使确定何时可以删除消息成为一个无关紧要的问题。
相关文章:
- Python ctype 'c_char_p' Memory Leak
- 模式"allocate memory or use existing data"
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- Win32 API - HWND "{unused = ???} Unable to read memory"错误
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- 向量数组"Cannot access memory at address"
- Java 本机访问代码错误:"Invalid memory access"
- P/从获取"tried to access protected memory error"调用非托管C++代码
- C++二进制到 Java 会"java.lang.Error: Invalid memory access"
- 在程序中打印有效,但 gdb 显示"Cannot access memory at address ..."
- 库达库兰德"An illegal memory access was encountered"
- 推力变换引发错误:"bulk_kernel_by_value: an illegal memory access was encountered"
- Bad Linux Memory Map File Performance with Random Access C++ & Python
- 简单的 CUDA 测试总是失败并出现错误"an illegal memory access was encountered"
- C++加载库ERROR_NOACCESS "Invalid access to memory location."
- Priority_queue problems Memory access
- 为什么在检查核心转储时进入 gdb "Cannot access memory at address 0x..."?