простой тест fastflow может вызвать утечку памяти

Я недавно тестировал fastflow в g ++ 4.4.6, следующий довольно простой тест:

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,
Я обнаружил, что «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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]