WSACleanup会导致内存泄漏么

一秒一次郎 2012-08-11 07:48:24

SOCKET MySocket;
WSADATA wsaDATA;
WSAStartup(MAKEWORD(2,2),&wsaDATA);


if ( LOBYTE( wsaDATA.wVersion ) != 2 ||
HIBYTE( wsaDATA.wVersion ) != 2 ) {
AfxMessageBox("失败");
}

MySocket =socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
closesocket(MySocket);
WSACleanup();


循环调用以上代码的时候会发现 内存无限增大
经过测试问题出在 WSACleanup() 这个函数上,注释掉它,就没有任何问题了,怎么回事,请有经验的说说
...全文
161 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
翅膀又硬了 2012-08-13
  • 打赏
  • 举报
回复
学习了。[Quote=引用 6 楼 的回复:]
WSACleanup()会终止所有操作然后卸载DLL。

而DLL被卸载后映像内存不一定立即被释放。

下次又加载到不同的内存地址,如此反复
[/Quote]
一秒一次郎 2012-08-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
多次WSAStartup不会引发异常,但是资源不会重新被加载
[/Quote]


那WSACleanup()呢?
RLib 2012-08-12
  • 打赏
  • 举报
回复
WSACleanup()会终止所有操作然后卸载DLL。

而DLL被卸载后映像内存不一定立即被释放。

下次又加载到不同的内存地址,如此反复
RLib 2012-08-11
  • 打赏
  • 举报
回复
多次WSAStartup不会引发异常,但是资源不会重新被加载
一秒一次郎 2012-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
循环调用以上代码,会频繁的加在DLL,又马上卸载DLL,开销很大
[/Quote]


这个是频繁加载、卸载dll的原因吗?
一秒一次郎 2012-08-11
  • 打赏
  • 举报
回复
那有什么好的解决方法
Gloveing 2012-08-11
  • 打赏
  • 举报
回复
循环调用以上代码,会频繁的加在DLL,又马上卸载DLL,开销很大

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧