Not if you initialize the pointers to zero: Mat A = NULL. Matt
On Mon, Jan 20, 2020 at 6:31 PM Sam Guo <[email protected]> wrote: > I mean MatDestroy. > > On Mon, Jan 20, 2020 at 3:28 PM Sam Guo <[email protected]> wrote: > >> Does it hurt to call Destroy function without calling CreateFunction? For >> example >> Mat A, B; >> >> PetscErrorCode >> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscErrorCode.html#PetscErrorCode> >> ierr1, ierr2; >> >> ierr1 = MatCreate >> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreate.html#MatCreate>(PETSC_COMM_WORLD >> >> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD>,&A); >> >> if(ierr1 == 0) >> >> { >> >> ierr2 = MatCreate >> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreate.html#MatCreate>(PETSC_COMM_WORLD >> >> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD>,&B); >> >> } >> >> if(ierr1 !=0 || ierr2 != 0) >> >> { >> >> Destroy(&A); >> >> Destroy(&B); // if ierr1 !=0, MatCreat is not called on B. Does it hurt to >> call Destroy B here? >> >> } >> >> >> >> >> On Mon, Jan 20, 2020 at 11:11 AM Dave May <[email protected]> >> wrote: >> >>> >>> >>> On Mon 20. Jan 2020 at 19:47, Sam Guo <[email protected]> wrote: >>> >>>> Can I assume if there is MatCreat or VecCreate, I should clean up the >>>> memory myself? >>>> >>> >>> Yes. You will need to call the matching Destroy function. >>> >>> >>> >>>> On Mon, Jan 20, 2020 at 10:45 AM Sam Guo <[email protected]> wrote: >>>> >>>>> I only include the first few lines of SLEPc example. What about >>>>> following >>>>> ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); >>>>> ierr = MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr); >>>>> Is there any memory lost? >>>>> >>>>> On Mon, Jan 20, 2020 at 10:41 AM Dave May <[email protected]> >>>>> wrote: >>>>> >>>>>> >>>>>> >>>>>> On Mon 20. Jan 2020 at 19:39, Sam Guo <[email protected]> wrote: >>>>>> >>>>>>> I don't have a specific case yet. Currently every call of PETSc is >>>>>>> checked. If ierr is not zero, print the error and return. For example, >>>>>>> Mat A; /* problem matrix */ >>>>>>> EPS eps; /* eigenproblem solver context */ >>>>>>> EPSType type; >>>>>>> PetscReal error,tol,re,im; >>>>>>> PetscScalar kr,ki; Vec xr,xi; 25 >>>>>>> PetscInt n=30,i,Istart,Iend,nev,maxit,its,nconv; >>>>>>> PetscErrorCode ierr; >>>>>>> ierr = SlepcInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr); >>>>>>> ierr = PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL);CHKERRQ(ierr); >>>>>>> ierr = PetscPrintf(PETSC_COMM_WORLD,"\n1-D Laplacian >>>>>>> Eigenproblem, n=%D\n\n",n);CHKERRQ(ierr); >>>>>>> >>>>>>> I am wondering if the memory is lost by calling CHKERRQ. >>>>>>> >>>>>> >>>>>> No. >>>>>> >>>>>> >>>>>> >>>>>>> On Mon, Jan 20, 2020 at 10:14 AM Dave May <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Mon 20. Jan 2020 at 19:11, Sam Guo <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Dear PETSc dev team, >>>>>>>>> If PETSc function returns an error, what's the correct way to >>>>>>>>> clean PETSc? >>>>>>>>> >>>>>>>> >>>>>>>> The answer depends on the error message reported. Send the complete >>>>>>>> error message and a better answer can be provided. >>>>>>>> >>>>>>>> Particularly how to clean up the memory? >>>>>>>>> >>>>>>>> >>>>>>>> Totally depends on the objects which aren’t being freed. You need >>>>>>>> to provide more information >>>>>>>> >>>>>>>> Thanks >>>>>>>> Dave >>>>>>>> >>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> Sam >>>>>>>>> >>>>>>>> -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
