我copy了一部分别人的程序,在开发板上运行一段时间后发现有内存泄露的提示,这个该怎么办,也没调试工具,只能加打印信息。
其中malloc动态产生链表在程序结束的时候释放
可以把程序放到pc上先调试,在pc上调试过了,再放过去。
有很多地方必须得和开发板上信息交互才行
[Quote=引用楼主 fenglinqiu 的回复:]
我copy了一部分别人的程序,在开发板上运行一段时间后发现有内存泄露的提示,这个该怎么办,也没调试工具,只能加打印信息。
其中malloc动态产生链表在程序结束的时候释放
[/Quote]
动态申请/释放内存的地方加打印,设置一个全局变量,每次malloc将变量++,每次free将变量--,看看是否变量为0便知道是否自己忘记释放了。
另外动态申请内存的,我习惯放在一个全局结构里,当程序结束时我会逐一检查,看看是否都正常释放了。
一步一步跟踪吧,多看看指针,内存相关的地方,先大方向跟踪,然后再逐渐缩小范围呗,程序不多的话,也可以贴出来大伙看下。
代码review一下,主要看申请内存和释放内存的地方就行了,既然已经知道结果,肯定可以看出来的。
那就多加点打印信息吧
用宏重新定义malloc和free。记录每次malloc和free的地址,然后看什么地方泄露,也可以malloc时在最后多分配几个字节,记录一个标记,free时检测标记避免越界访问。
编写程序detab, 将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止的地方。假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。
------------------- ......