Выражение: _BLOCK_TYPE_ISVAILD (pHead-> nBlockUse) - PullRequest
0 голосов
/ 05 июня 2011
void Connection::Receive(){
    socket_.async_read_some(boost::asio::buffer(read_buffer_),
          boost::bind(&Connection::handle_Receive, shared_from_this(),boost::asio::placeholders::error));
}

void Connection::handle_Receive(const boost::system::error_code& error)
{
  if(!error)
  {
      if(read_buffer_.size() <=0){
          read_buffer_.empty();
          this->Disconnect();
      }
        ByteBuffer b((std::shared_ptr<uint8_t>)read_buffer_.data(), read_buffer_.size());
        this->OnReceived(b);
        read_buffer_.empty();
  }
//when it loses the if(!error) scope the error pop-up
    }

Ошибка:

Debug Assertion Faild!

Program: D:\C++\Server\Debug\Authsever.exe
File:f:\dd\vctools\crt_bld\self_x86\crt\src\dbgdel.cpp
Expression: _BLOCK_TYPE_ISVAILD(pHead->nBlockUse)

когда он теряет область if (! Error), всплывающее окно с ошибкой, что означает эта ошибка?!

1 Ответ

0 голосов
/ 05 июня 2011

Вы получаете двойное удаление от приведения uint8_t*, принадлежащего от boost::array<uint8_t,1000> к std::shared_ptr.

    ByteBuffer b((std::shared_ptr<uint8_t>)read_buffer_.data(), read_buffer_.size());
                                        ^^^^^

Не делайте этого, shared_ptr - для указателей с динамической продолжительностью хранения.

...