2011-05-23 87 views
0
class Connection 
{ 
public: 
    explicit Connection(boost::asio::io_service& io_service); 
    virtual ~Connection(); 
    boost::asio::ip::tcp::socket& socket(); 

    virtual void OnConnected()=0; 
    void Send(uint8_t* buffer, int length); 
    bool Receive(); 
private: 
    void handler(const boost::system::error_code& error, std::size_t bytes_transferred); 
    boost::asio::ip::tcp::socket socket_; 
}; 
----------------------------------------------------------------------------------- 
Server::Server(boost::asio::io_service& io_service,short port) 
    : acceptor_(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)){ 
     m_connections = new std::vector<Connection*>();   
     start_accept(); 


     std::cout<<"Socket accepting connections..."<<std::endl; 
} 

Server::~Server() 
{ 
    m_connections->clear(); 
    delete m_connections; 
} 

void Server::start_accept(){ 

    /* Connection::pointer new_connection = 
     Connection::create(acceptor_.io_service());*/ 

    acceptor_.async_accept(m_connections->front()->socket(), 
     boost::bind(&Server::handle_accept, this, m_connections, 
      boost::asio::placeholders::error)); 

} 

它構建沒有錯誤的項目,但是當我試圖運行它的中斷程序,並給了我這個錯誤矢量:0000005:在AccountServer.exe 0x00066314未處理的異常訪問衝突讀取位置0xccccccd0

Unhandled exception at 0x00066314 in AccountServer.exe: 0xC0000005: Access violation reading location 0xccccccd0. 

這裏有什麼問題?

+2

您是否嘗試過調試器?事故究竟發生在哪裏? – 2011-05-23 11:58:15

+0

@ Space_C0wb0y是的,它說'矢量迭代器不dereferencabel' – Abanoub 2011-05-23 12:14:57

回答

1

此行

m_connections = new std::vector<Connection*>(); 

創建指針的向量。指針何時起作用?

在這裏,他們被假定爲指向一個socket()

acceptor_.async_accept(m_connections->front()->socket(), 
+0

對不起,我沒有得到你想告訴我什麼! – Abanoub 2011-05-23 12:33:37

+0

@MixedCoder - 嘗試參照指針時發生訪問衝突。調試器使用值0xcccccccc標記未初始化的內存。值0xccccccd0是訪問與該指針偏移幾個字節的結果,就像在'front() - > socket()'中那樣。真正的問題可能是'm_connections'完全是空的。 – 2011-05-23 12:37:32

+0

那我該如何讓它工作!? – Abanoub 2011-05-23 12:58:07

2

假設的Visual C++在這裏,我想this question可能與成才;您正在嘗試取消引用堆棧上未初始化的指針。

具體而言,在初始化指向矢量的指針之前,您正在調用start_accept()顯然,你的服務器對象居住在堆棧上,並且要訪問的向量結構中的第一個字段的偏移量爲4.

+0

耶您的權利IDK的我怎麼froget這一點,但仍然當我是打破 錯誤 '矢量迭代方法之前作出新的載體不dereferencabel' – Abanoub 2011-05-23 12:11:45

+0

是的,那就是對方的回答進來 - '開始() '將一個迭代器返回到第一個元素,或者如果沒有元素,則返回一個末尾。由於您尚未插入元素,因此第二種情況適用,並且調試代碼發現您試圖解引用單個迭代器。 – 2011-05-23 12:22:58

+0

如此呃,我該如何解決這個問題? – Abanoub 2011-05-23 12:28:44

相關問題