[petsc-users] pastix solver break at pastix_checkMatrix

Gong Ding gdiso at ustc.edu
Sun Jan 2 21:42:01 CST 2011

Dear  Barry,

It seems the patch will cause memory leak.

when  valOnly is false, memory will be allocated for colptr, row and values. 

99:  if (!valOnly){
100:   ierr = PetscMalloc(((*n)+1) *sizeof(PetscInt)   ,colptr );CHKERRQ(ierr);
101:   ierr = PetscMalloc( nnz     *sizeof(PetscInt)   ,row);CHKERRQ(ierr);
102:   ierr = PetscMalloc( nnz     *sizeof(PetscScalar),values);CHKERRQ(ierr);

But at the end of function MatConvertToCSC

186:    ierr = PetscMemcpy(*colptr,tmpcolptr,(*n+1)*sizeof(PetscInt));CHKERRQ(ierr);
187:    ierr = PetscMalloc(((*colptr)[*n]-1)*sizeof(PetscInt),row);CHKERRQ(ierr);
188:   ierr = PetscMemcpy(*row,tmprows,((*colptr)[*n]-1)*sizeof(PetscInt));CHKERRQ(ierr);
189:    ierr = PetscMalloc(((*colptr)[*n]-1)*sizeof(PetscScalar),values);CHKERRQ(ierr);
190:    ierr = PetscMemcpy(*values,tmpvalues,((*colptr)[*n]-1)*sizeof(PetscScalar));CHKERRQ(ierr);

memory will be allocated again. 
Which means when code call MatConvertToCSC next time, the memory allocated at line 100-102 will be lost.

Will you please fix this problem? i.e. check the *colptr, *row and *values, when they are not empty, skip the memory allocation
at line  100-102.

Gong Ding

More information about the petsc-users mailing list