Changeset 3c4b08


Ignore:
Timestamp:
May 5, 2008, 4:54:44 PM (17 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
63382d
Parents:
2459b1
Message:

joiner crashed due to incorrect destructing of MatrixContainer, analyzer did not initialise KeySets in ParseKeySets

joiner crashed as ParseMatrix would return without free'ing initialized Matrix and RowCounter when suffix file cannot be opened. Now, they are initialized in such a manner that ~MatrixContainer recognizes and free's them
analyzer would stumble afgter parsing keysets on the order, as he was looking for -1 to which KeySets was not properly initialized but what should be read from KeySets file.
Also, analyzer would parse the final tab as a number which rendered nonsense. Hence, StoreKeySetFile does not ptroduce a tab after last entry per line anymore

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/parser.cpp

    r2459b1 r3c4b08  
    6363 */
    6464MatrixContainer::~MatrixContainer() {
    65   if (Matrix != NULL)
     65  if (Matrix != NULL) {
    6666    for(int i=0;i<MatrixCounter;i++) {
    67       if (RowCounter != NULL)
    68         for(int j=0;j<=RowCounter[i];j++)
    69           Free((void **)&Matrix[i][j], "MatrixContainer::~MatrixContainer: *Matrix[][]");
    70       Free((void **)&Matrix[i], "MatrixContainer::~MatrixContainer: **Matrix[]");
    71     }
    72   if ((RowCounter != NULL) && (Matrix[MatrixCounter] != NULL))
    73     for(int j=0;j<=RowCounter[MatrixCounter];j++)
    74       Free((void **)&Matrix[MatrixCounter][j], "MatrixContainer::~MatrixContainer: *Matrix[MatrixCounter][]");
    75   if (MatrixCounter != 0)
    76     Free((void **)&Matrix[MatrixCounter], "MatrixContainer::~MatrixContainer: **Matrix[MatrixCounter]");
    77   Free((void **)&Matrix, "MatrixContainer::~MatrixContainer: ***Matrix");
    78  
     67      if (RowCounter != NULL) {
     68          for(int j=0;j<=RowCounter[i];j++)
     69            Free((void **)&Matrix[i][j], "MatrixContainer::~MatrixContainer: *Matrix[][]");
     70        Free((void **)&Matrix[i], "MatrixContainer::~MatrixContainer: **Matrix[]");
     71      }
     72    }
     73    if ((RowCounter != NULL) && (Matrix[MatrixCounter] != NULL))
     74      for(int j=0;j<=RowCounter[MatrixCounter];j++)
     75        Free((void **)&Matrix[MatrixCounter][j], "MatrixContainer::~MatrixContainer: *Matrix[MatrixCounter][]");
     76    if (MatrixCounter != 0)
     77      Free((void **)&Matrix[MatrixCounter], "MatrixContainer::~MatrixContainer: **Matrix[MatrixCounter]");
     78    Free((void **)&Matrix, "MatrixContainer::~MatrixContainer: ***Matrix");
     79  }
    7980  if (Indices != NULL)
    8081    for(int i=0;i<=MatrixCounter;i++) {
     
    101102  char *FragmentNumber = NULL;
    102103  stringstream line;
    103   double tmp; 
    104104 
    105105  Header = (char *) Malloc(sizeof(char)*1023, "MatrixContainer::ParseMatrix: *EnergyHeader");
     
    123123  Matrix = (double ***) Malloc(sizeof(double **)*(MatrixCounter+1), "MatrixContainer::ParseMatrix: ***Matrix"); // one more each for the total molecule
    124124  RowCounter = (int *) Malloc(sizeof(int)*(MatrixCounter+1), "MatrixContainer::ParseMatrix: *RowCounter");
     125  for(int i=0;i<=MatrixCounter;i++) {
     126    Matrix[i] = NULL;
     127    RowCounter[i] = -1;
     128  }
    125129  for(int i=0;i<=MatrixCounter;i++) {
    126130    // energy
     
    498502  cout << "Parsing key sets." << endl;
    499503  KeySets = (int **) Malloc(sizeof(int *)*FragmentCounter, "KeySetsContainer::ParseKeySets: **KeySets");
     504  for(int i=0;i<FragmentCounter;i++)
     505    KeySets[i] = NULL;
    500506  line << name << FRAGMENTPREFIX << KEYSETFILE;
    501507  input.open(line.str().c_str(), ios::in);
     
    511517    // parse the values
    512518    KeySets[i] = (int *) Malloc(sizeof(int)*AtomCounter[i], "KeySetsContainer::ParseKeySets: *KeySets[]");
     519    for(int j=0;j<AtomCounter[i];j++)
     520      KeySets[i][j] = -1;
    513521    FragmentNumber = FixedDigitNumber(FragmentCounter, i);
    514522    cout << FRAGMENTPREFIX << FragmentNumber << "[" << AtomCounter[i] << "]:";
Note: See TracChangeset for help on using the changeset viewer.