It would help us if you could provide the shortest possible (but complete) example code that exhibits the problem. As it is, you say the problem is when you delete the molecule, but there is no line that deletes the molecule.
On Thu, 27 Feb 2020 at 16:19, Alessandro S. Nascimento < asnascime...@ifsc.usp.br> wrote: > Dear OpenBabel users, > > I am trying to write a piece of C++ code to generate conformers using the > OpenBabel API. My current code is mostly based on OB tutorials... not > really a big deal. > > Almost everything seems to be working. The problem is with memory > allocation. When my function gets out of scope, it gives me a mem leak: > malloc: *** error for object 0x103300350: pointer being freed was not > allocated > *** set a breakpoint in malloc_error_break to debug. > which seems to be related to the object mol (OBMol mol). > > I tried the dynamic allocation with new/delete and got exactly the same > thing when trying to delete the object mol in the second function below. No > problems when deleting the ref_mol object. > > My initial guess was that I had to clear the conformers generated before > deleting the object. I then tried to use DeleteConformer function with no > success. > > Any clues/ideas? They are all very welcome! > > My OB version is 3.0.0 and my current OS is MacOS Sierra 10.12.6: > $g++ -v > Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr > --with-gxx-include-dir=/usr/include/c++/4.2.1 > Apple LLVM version 9.0.0 (clang-900.0.39.2) > Target: x86_64-apple-darwin16.7.0 > Thread model: posix > InstalledDir: > /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin > > Thanks in advance, > > -Alessandro > > OBMol Conformer::GetMol(const std::string &molfile){ > > OBMol mol; > > OBConversion conv; > > OBFormat *format = conv.FormatFromExt(molfile.c_str()); > > if (!format || !conv.SetInFormat(format)) { > > printf("Could not find input format for file\n"); > > return mol; > > } > > ifstream ifs(molfile.c_str()); > > if (!ifs) { > > printf("Could not open %s for reading\n", molfile.c_str()); > > return mol; > > } > > if (!conv.Read(&mol, &ifs)) { > > printf("Could not read molecule from file\n"); > > return mol; > > } > > return mol; > > } > > > ****************************************************************** > > bool file_read; > > OBMol mol = this->GetMol(molfile); > > OBMol ref_mol = this->GetMol(molfile); > > > OBForceField* OBff; > > if (Input->ligand_energy_model == "GAFF" or Input->ligand_energy_model == > "gaff"){ > > OBff = OBForceField::FindForceField("GAFF"); > > } > > else { > > OBff = OBForceField::FindForceField("MMFF94"); > > } > > > if (!OBff){ > > printf("Could not find OpenBabel FF parameters!\n"); > > exit(1); > > } > > > OBff->Setup(mol); > > mol.SetTotalCharge(mol.GetTotalCharge()); // necessary? > > double energy = OBff->Energy(); > > if (OBff->GetUnit() == "kJ/mol"){ // Converting to kcal/mol, if > needed. > > energy = energy/4.18; > > } > > Lig->conformer_energies.push_back(energy); > > Lig->mcoords.push_back(Lig->xyz); > > > // Conformer > > OBff->DiverseConfGen(0.5, 1000, 50.0, false); > > OBff->GetConformers(mol); > > > if (mol.NumConformers() > 0){ > > for (int i=0; i<mol.NumConformers(); i++){ > > double* xyz = new double[mol.NumAtoms()*3]; > > vector<double> v3; > > vector<vector<double> > xyz_tmp; > > mol.SetConformer(i); > > OBff->Setup(mol); > > OBff->GetCoordinates(mol); > > energy = OBff->Energy(); > > if (OBff->GetUnit() == "kJ/mol"){ // Converting to > kcal/mol, if needed. > > energy = energy/4.18; > > } > > Lig->conformer_energies.push_back(energy); > > > OBAlign* align = new OBAlign; > > align->SetRefMol(ref_mol); > > align->SetTargetMol(mol); > > align->Align(); > > align->UpdateCoords(&mol); > > delete align; > > > xyz = mol.GetCoordinates(); > > for (unsigned j=0; j<mol.NumAtoms(); j++){ > > v3.push_back(xyz[3*j]); > > v3.push_back(xyz[(3*j)+1]); > > v3.push_back(xyz[(3*j)+2]); > > xyz_tmp.push_back(v3); > > v3.clear(); > > } > > Lig->mcoords.push_back(xyz_tmp); > > xyz_tmp.clear(); > > > delete[] xyz; > > } > > file_read = true; > > } > > else { > > file_read = false; > > } > > > ref_mol.Clear(); > > mol.Clear(); > > > return file_read; > > > -- > ******************************************************** > Alessandro S. Nascimento > Professor > São Carlos Institute of Physics (IFSC) > University of São Paulo (USP) > E-mail: asnascime...@ifsc.usp.br > Phone: +55-16-3373-8709 > ******************************************************** > _______________________________________________ > OpenBabel-discuss mailing list > OpenBabel-discuss@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/openbabel-discuss >
_______________________________________________ OpenBabel-discuss mailing list OpenBabel-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbabel-discuss