日期:2014-05-16  浏览次数:20635 次

如果非配完内存不进行释放会产生什么情况?
情况大体是这样:我在用libpcap进行循环抓包。整个程序是一直运行的。在抓到第一个包之后分配了内存给一个结构体,进行一些具体操作。但是分析完一个包之后并不释放内存。而是要用内存里面的数据进行跟下一个包数据进行比较,以此类推。这样的话这块内存一直存在,并不释放。这样会产生什么问题呢?
  因为我在程序里面进行了另外的内存非配,产生了错误:malloc(): memory corruption: 。所以才注意到这个问题。

------解决方案--------------------
严重的内存泄露。
------解决方案--------------------
只用比较相邻的包吗?如果是那就把前面不用的释放掉。

如果要将抓到的所有包进行相互匹配,,那就先将包抓住后放到文件中,,
抓完后在在文件中进行比较。

还有你想匹配的是什么? ip,port,tcp,udp头? 或者是数据部分? 前者就解析出来保存,,后者就放文件里面吧。
------解决方案--------------------
探讨

可能一楼对我说的理解有误。我的意思是这块内存是一直存在的,但是里面的东西时不停变化的。在下一个包到来之后覆盖掉内存里面原来的东西。不是说一直开辟新的内存。就跟使用变量一样。

------解决方案--------------------
那说明你的程序有内存泄漏,存在没释放的内存。

唯一的解决办法就是你先把libpcap接口搞懂,有的是需要你主动释放的,另外找你程序的bug,malloc和free是否配对。