开发平台(Platform): (Ex: Win10, Linux, ...)
win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC 2017
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
#pragma comment(lib,"Ws2_32.lib")
#include <Winsock2.h>
#include <Ws2tcpip.h>
#include <string>
#include <vector>
#include <map>
#include <mutex>
问题(Question):
vector 删除元素时发生错误,最神奇的地方是:
vector 是有正确存放资料
想询问有什么特殊情况会发生这样的事情呢?
且 iterator 也有正确指向资料
喂入的资料(Input):
struct ptr
预期的正确结果(Expected Output):
可以删除元素
错误结果(Wrong Output):
掷回例外状况
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://pastebin.com/W8eRsbef
补充说明(Supplement):
https://imgur.com/a/2ScWsfO
思考想法:
int main 选择要担任 server 或 client, 然后就 getchar() 等关闭.
希望能实现 non-blocking socket recv/ send/ accept
因此采用 thread 和 select 去避免无回应的情况
问题出在当 client 断线后,我会收到 recv <= 0
那我就要将该 clinet listener 砍除
问题发生在砍除的时候 vector.erease
但砍除前都有抓到 iterator , 因此觉得奇怪