读书人

频繁调用malloc函数会导致内存异常吗

发布时间: 2013-08-10 21:14:06 作者: rapoo

频繁调用malloc函数会导致内存错误吗?
我写的服务器里面用了一个结构体来记录连接上来的客户端信息,使用select来进行应答监控,每次有新的连接就malloc一个空间出来放到链表里,然后我测试的时候开了100个客户端来连接服务器,每个客户端都不断的循环连接断开20次,于是当达到800多个连接的时候就发生Segmentation fault (core dumped)错误,服务器直接挂了。。。连续几次重开都能达到800多个连接,再然后竟然一个连接都连不了了,卡在malloc这个函数里,只是什么回事啊?我每次都有释放申请的空间啊。

sprintf(errorMessage, "got connection from %s!the %d connector, %s", inet_ntoa(raddr.sin_addr),countcon, GetCurrentTime(0, 0));

vMsgLog(errorMessage);
lmysock soc=(lmysock)malloc(sizeof(mySock));
MsgLog("new malloc:%d\n",soc->sock);
soc->sock=newsock;
soc->lsock=head;
head=soc;
MsgLog("new Mysock:%d\n",soc->sock);

mySock 是一个结构体保存了一个整形和一个指针。。。求指导
malloc 服务器 测试 内存
[解决办法]
段错误通常是指针操作的问题,好好检查下哪里的指针有内存泄露/野指针的可能性吧
[解决办法]
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。



判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。

自己的内存池的
[解决办法]
看看是不是运行环境c库版本和开发环境不一致
[解决办法]
如果是服务器端 还是定义自己的内存池
------解决方案--------------------


Holy Shi....
楼主, 不能这样啊,你这代码加了密码做了混淆拿来给大家看, 消遣大家啊。。。
一个函数不要超过一屏好不好。。。。
if else 嵌套不要太深好不好。。。。
本地变量不要太多好不好啊。。。。
SRP 一下好不好啊。。。。

读书人网 >C++

热点推荐