Вектор: необработанное исключение в 0x00066314 в AccountServer.exe: 0xC0000005: место чтения нарушения прав доступа 0xccccccd0 - PullRequest
0 голосов
/ 23 мая 2011
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));

}

он строит проект без ошибок, но когда я пытаюсь запустить программу, он ломается и выдает мне эту ошибку

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

что здесь не так?!

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

Если предположить Visual C ++ здесь, я думаю этот вопрос может быть связан; вы пытаетесь разыменовать неинициализированный указатель на стек.

В частности, вы вызываете start_accept () перед инициализацией указателя на вектор; очевидно, ваш объект Server находится в стеке, а первое поле в векторной структуре, к которому осуществляется доступ, живет со смещением 4.

1 голос
/ 23 мая 2011

Эта строка

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

создает вектор указателей.Когда указатели инициализируются?

Здесь предполагается, что они указывают на что-то с socket()

acceptor_.async_accept(m_connections->front()->socket(), 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...