快速流程简单测试可能会导致内存泄漏

时间:2013-11-26 04:14:41

标签: c++ memory-leaks fastflow

我最近在g ++ 4.4.6中测试了fastflow,以下是一个非常简单的测试:

using namespace ff ;
int g1=0 ;

class Stage1 : public ff_node{
public :
    void *svc(void *task){
        g1++ ;
        if(g1 >= 10000)
        {
            return NULL ;
        }
        char *p=(char*) calloc(sizeof(char),10) ;
        return ((void*)p) ;
    }
} ;
class Stage2 : public ff_node{
public :
    void *svc(void *task){
        free(task) ;
        return GO_ON ;
    }
} ;

int main(int agrc,char *argv[])
{
    ff_pipeline pipe ;
    pipe.add_stage(new Stage1()) ;
    pipe.add_stage(new Stage2()) ;

    for(int idx=0;idx<1000000;idx++)
    {
        g1 = 0 ;
        if(pipe.run_and_wait_end() <0){
            error("running pipeline\n");
            return -1 ;
        }
        printf("idx=(%d)\n",idx) ;
    }
    return 0 ;
}

这个测试很简单,但我观察linux中top的内存使用情况, 我发现“VIRT”和“RES”正在增加,我不知道,因为Stage1 分配内存,Stage2将释放它,非常简单的实现,请问 我在这个测试样本中想念的是什么?!

编辑:

class Stage1 : public ff_node{
public :
    void *svc(void *task){
        g1++ ;
        if(g1 >= 10000)
        {
            return NULL ;
        }
        //char *p=(char*) calloc(sizeof(char),10) ;
        //return ((void*)p) ;
        std::auto_ptr<char> x(new char(10)) ;
        return ((void*)x.get()) ;
    }
} ;
class Stage2 : public ff_node{
public :
    void *svc(void *task){
        //free(task) ;
        return GO_ON ;
    }
} ;

使用auto_ptr仍然会遇到同样的问题....

0 个答案:

没有答案