最近公司一个产品在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;
    }
}
为什么分配不同的内存块后,现象不一致,不解,待查。。。