最近公司一个产品在AIX5.3上,运行若干天后,经常coredump,反复加日志后,逐渐定位到是调用strdup函数后,没有释放空间所导致。
在AIX5.3进行了测试,发现连续malloc后的现象如下:
1)连续分配4k,测试进程coredump(宕)
2)连续分配8K,测试进程coredump(宕)
3)连续分配12k,测试进程coredump(宕)
4)连续分配12k+1,测试进程coredump(宕)
5)连续分配12k+256,测试进程coredump(宕)
6)连续分配12k+384,测试进程coredump(宕)
7)连续分配12k+448,测试进程coredump(宕)
8)连续分配12k+511,测试进程coredump(宕)
9)连续分配12k+512,不宕,malloc调用失败,返回0
10)连续分配16K,不宕,malloc调用失败,返回0
11)连续分配14k,不宕,malloc调用失败,返回0
12)连续分配13k,不宕,malloc调用失败,返回0
测试程序如下:
#include <stdio.h>
#include <string.h>
int main()
{
char * p;
int i=1;
while(i++)
{
p=(char *)malloc(144);/*连续分配内存,不释放*/
printf("i=%d, p=%x, /n", i, p);
if(p==NULL)
break;
if(i%100000==0)
sleep(1);
if(p==NULL)
break;
}
}
为什么分配不同的内存块后,现象不一致,不解,待查。。。