C++程序崩溃的问题
一、案发现场
class TcpRemoting {
public:
void Send(unsigned char *data) {
// 在这里应该添加锁
if(_dataRaw != NULL) {
// 多线程不加锁,可能多个线程同时释放同一块内存导致程序异常
delete _dataRaw;
_dataRaw = NULL;
}
_dataRaw = new unsigned char;
memcpy(_dataRaw, data, sizeof(unsigned char));
}
public:
unsigned char *_dataRaw;
};
- 使用自定义TcpRemoting类中的Send方法发送数据,现在有两个线程同时要发送Send(A)和Send(B),这时调用栈可能会出现异常
HEAP[xxx.exe]: Invalid address specified to RtlValidateHeap( 020B0000, 12920EC0 )