使用XCode 调试的时候,运行过程中报了EXC_BAD_ACCESS的错误。
google了一翻之后,这个错误因为是调用了一个被释放过的对象导致的,错误的伪代码如下:
void TCPClient::write(string message){
uv_write_t write_req;
uv_write(&write_req, handle, &buf, buf_count, on_write);
}
通过socket向一个服务器发送数据时,此函数有一个 write_req传到uv_write里,函数执行完后write_req会释放掉。
发送完毕后,服务器会返回,此时服务器会去读write_req,但是已经被释放了,导致了EXC_BAD_ACCESS的错误。
解决的办法是:不要在函数里创建这个write_req,应该存到对象里或用指针的方式创建,要在回调的时候不要被释放即可解决。