微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

向量:AccountServer.exe中0x00066314处的未处理异常:0xC0000005:访问冲突读取位置0xccccccd0

如何解决向量:AccountServer.exe中0x00066314处的未处理异常:0xC0000005:访问冲突读取位置0xccccccd0

|
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.
这里怎么了?     

解决方法

假设在这里使用Visual C ++,我认为这个问题可能是相关的。您正在尝试在堆栈上取消引用未初始化的指针。 具体来说,在初始化指向向量的指针之前,您正在调用start_accept();显然,您的Server对象位于堆栈上,向量结构中要访问的第一个字段位于偏移量4处。     ,这条线
m_connections = new std::vector<Connection*>(); 
创建一个指针向量。指针何时初始化? 在这里,他们假设指向some3ѭ
acceptor_.async_accept(m_connections->front()->socket(),
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。