案例1:
时间:2012.08.13
描述:CSerial类中函数send声明一个临时OVERLAPPED类型的变量,调用WriteFile 。
void CSerial::send(const char *data, int len)
{
DWORD writeLen = 0;
OVERLAPPED &overlapped = serial->_overlapped;
::ZeroMemory(&overlapped, sizeof(overlapped));
overlapped.hEvent = serial->_event;
WriteFile(this->_hCommPort, data, len, &writeLen, overlapped);
}
外面使用:
CSerial->send(xxxx);
结果release下,程序在send后加入sleep后崩溃,如果不加入sleep程序不崩溃。
原因:writefile使用了,异步方式,这样WriteFile没有真正的发送出去,函数就返回了,接着
程序sleep,导致临时变量overlapped的栈是非法的了, 导致WriteFile成功后,写
overlapped,出现异常。