伪代码:
class WatchInfo { OVERLAPPED overLapped; }
ReadDirectoryChanged会传watchInfo的overlapped地址;
getQueuedCompletionStatus传入一OVERLAPPED指针,函数返回后该指针可能会被赋值(目前还没用到这个);
而ReadDirectoryChanged和getQueuedCompletionStatus以及delete watchInfo是在不同线程中处理,猜测有没有可能是watchInfo被delete掉后,read和getQueued写了(或者访问?)watchInfo的overlapped?
导致free heap block modified at after it was freed,但当使用了gflags命令行,该异常又不出现,十分神奇!另外,单独在资源管理器启动exe,也不会出现该异常。
解决方案:
将watchInfo放入vector中,等read和getQueued所在线程停止后,再delete。
原因:有待深究。