Browse Source

hybrid engine: consistently use delete[] when destroying solution vectors

Technically, using 'plain' delete for deleting objects allocated with
new[] is undefined behaviour. In practice, this didn't appear to be a
problem.



git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@11787 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Joachim Klein 10 years ago
parent
commit
72d08b9407
  1. 4
      prism/src/hybrid/PH_JOR.cc
  2. 4
      prism/src/hybrid/PH_NondetBoundedUntil.cc
  3. 6
      prism/src/hybrid/PH_NondetReachReward.cc
  4. 6
      prism/src/hybrid/PH_NondetUntil.cc
  5. 2
      prism/src/hybrid/PH_PSOR.cc
  6. 4
      prism/src/hybrid/PH_Power.cc
  7. 2
      prism/src/hybrid/PH_ProbBoundedUntil.cc
  8. 2
      prism/src/hybrid/PH_ProbCumulReward.cc
  9. 2
      prism/src/hybrid/PH_ProbInstReward.cc
  10. 2
      prism/src/hybrid/PH_ProbTransient.cc
  11. 2
      prism/src/hybrid/PH_SOR.cc

4
prism/src/hybrid/PH_JOR.cc

@ -293,7 +293,7 @@ jdouble omega // omega (over-relaxation parameter)
PH_PrintToMainLog(env, "\n%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup); PH_PrintToMainLog(env, "\n%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", (omega == 1.0)?"Jacobi":"JOR", iters, time_taken, time_for_iters/iters, time_for_setup);
// if the iterative method didn't terminate, this is an error // if the iterative method didn't terminate, this is an error
if (!done) { delete soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
// catch exceptions: register error, free memory // catch exceptions: register error, free memory
} catch (std::bad_alloc e) { } catch (std::bad_alloc e) {
@ -311,7 +311,7 @@ jdouble omega // omega (over-relaxation parameter)
if (diags_dist) delete diags_dist; if (diags_dist) delete diags_dist;
if (b_vec) delete[] b_vec; if (b_vec) delete[] b_vec;
if (b_dist) delete b_dist; if (b_dist) delete b_dist;
if (soln2) delete soln2;
if (soln2) delete[] soln2;
return ptr_to_jlong(soln); return ptr_to_jlong(soln);
} }

4
prism/src/hybrid/PH_NondetBoundedUntil.cc

@ -266,8 +266,8 @@ jboolean min // min or max probabilities (true = min, false = max)
if (hddms) delete hddms; if (hddms) delete hddms;
if (yes_vec) delete[] yes_vec; if (yes_vec) delete[] yes_vec;
if (yes_dist) delete yes_dist; if (yes_dist) delete yes_dist;
if (soln2) delete soln2;
if (soln3) delete soln3;
if (soln2) delete[] soln2;
if (soln3) delete[] soln3;
return ptr_to_jlong(soln); return ptr_to_jlong(soln);
} }

6
prism/src/hybrid/PH_NondetReachReward.cc

@ -320,7 +320,7 @@ jboolean min // min or max probabilities (true = min, false = max)
PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup);
// if the iterative method didn't terminate, this is an error // if the iterative method didn't terminate, this is an error
if (!done) { delete soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
// catch exceptions: register error, free memory // catch exceptions: register error, free memory
} catch (std::bad_alloc e) { } catch (std::bad_alloc e) {
@ -337,8 +337,8 @@ jboolean min // min or max probabilities (true = min, false = max)
if (hddms2) delete hddms2; if (hddms2) delete hddms2;
if (rew_vec) delete[] rew_vec; if (rew_vec) delete[] rew_vec;
if (rew_dist) delete rew_dist; if (rew_dist) delete rew_dist;
if (soln2) delete soln2;
if (soln3) delete soln3;
if (soln2) delete[] soln2;
if (soln3) delete[] soln3;
return ptr_to_jlong(soln); return ptr_to_jlong(soln);
} }

6
prism/src/hybrid/PH_NondetUntil.cc

@ -271,7 +271,7 @@ jboolean min // min or max probabilities (true = min, false = max)
PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); PH_PrintToMainLog(env, "\nIterative method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup);
// if the iterative method didn't terminate, this is an error // if the iterative method didn't terminate, this is an error
if (!done) { delete soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
// catch exceptions: register error, free memory // catch exceptions: register error, free memory
} catch (std::bad_alloc e) { } catch (std::bad_alloc e) {
@ -285,8 +285,8 @@ jboolean min // min or max probabilities (true = min, false = max)
if (hddms) delete hddms; if (hddms) delete hddms;
if (yes_vec) delete[] yes_vec; if (yes_vec) delete[] yes_vec;
if (yes_dist) delete yes_dist; if (yes_dist) delete yes_dist;
if (soln2) delete soln2;
if (soln3) delete soln3;
if (soln2) delete[] soln2;
if (soln3) delete[] soln3;
return ptr_to_jlong(soln); return ptr_to_jlong(soln);
} }

2
prism/src/hybrid/PH_PSOR.cc

@ -344,7 +344,7 @@ jboolean forwards // forwards or backwards?
PH_PrintToMainLog(env, "\n%sPseudo %s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); PH_PrintToMainLog(env, "\n%sPseudo %s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup);
// if the iterative method didn't terminate, this is an error // if the iterative method didn't terminate, this is an error
if (!done) { delete soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
// catch exceptions: register error, free memory // catch exceptions: register error, free memory
} catch (std::bad_alloc e) { } catch (std::bad_alloc e) {

4
prism/src/hybrid/PH_Power.cc

@ -229,7 +229,7 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?)
PH_PrintToMainLog(env, "\nPower method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup); PH_PrintToMainLog(env, "\nPower method: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", iters, time_taken, time_for_iters/iters, time_for_setup);
// if the iterative method didn't terminate, this is an error // if the iterative method didn't terminate, this is an error
if (!done) { delete soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
// catch exceptions: register error, free memory // catch exceptions: register error, free memory
} catch (std::bad_alloc e) { } catch (std::bad_alloc e) {
@ -243,7 +243,7 @@ jboolean transpose // transpose A? (i.e. solve xA=x not Ax=x?)
if (hddm) delete hddm; if (hddm) delete hddm;
if (b_vec) delete[] b_vec; if (b_vec) delete[] b_vec;
if (b_dist) delete b_dist; if (b_dist) delete b_dist;
if (soln2) delete soln2;
if (soln2) delete[] soln2;
return ptr_to_jlong(soln); return ptr_to_jlong(soln);
} }

2
prism/src/hybrid/PH_ProbBoundedUntil.cc

@ -230,7 +230,7 @@ jint bound // time bound
if (hddm) delete hddm; if (hddm) delete hddm;
if (yes_vec) delete[] yes_vec; if (yes_vec) delete[] yes_vec;
if (yes_dist) delete yes_dist; if (yes_dist) delete yes_dist;
if (soln2) delete soln2;
if (soln2) delete[] soln2;
return ptr_to_jlong(soln); return ptr_to_jlong(soln);
} }

2
prism/src/hybrid/PH_ProbCumulReward.cc

@ -225,7 +225,7 @@ jint bound // time bound
if (hddm) delete hddm; if (hddm) delete hddm;
if (rew_vec) delete[] rew_vec; if (rew_vec) delete[] rew_vec;
if (rew_dist) delete rew_dist; if (rew_dist) delete rew_dist;
if (soln2) delete soln2;
if (soln2) delete[] soln2;
return ptr_to_jlong(soln); return ptr_to_jlong(soln);
} }

2
prism/src/hybrid/PH_ProbInstReward.cc

@ -186,7 +186,7 @@ jint bound // time bound
// free memory // free memory
if (hddm) delete hddm; if (hddm) delete hddm;
if (soln2) delete soln2;
if (soln2) delete[] soln2;
return ptr_to_jlong(soln); return ptr_to_jlong(soln);
} }

2
prism/src/hybrid/PH_ProbTransient.cc

@ -206,7 +206,7 @@ jint time // time
// free memory // free memory
if (hddm) delete hddm; if (hddm) delete hddm;
if (soln2) delete soln2;
if (soln2) delete[] soln2;
return ptr_to_jlong(soln); return ptr_to_jlong(soln);
} }

2
prism/src/hybrid/PH_SOR.cc

@ -387,7 +387,7 @@ jboolean fwds // forwards or backwards?
PH_PrintToMainLog(env, "\n%s%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup); PH_PrintToMainLog(env, "\n%s%s: %d iterations in %.2f seconds (average %.6f, setup %.2f)\n", forwards?"":"Backwards ", (omega == 1.0)?"Gauss-Seidel":"SOR", iters, time_taken, time_for_iters/iters, time_for_setup);
// if the iterative method didn't terminate, this is an error // if the iterative method didn't terminate, this is an error
if (!done) { delete soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
if (!done) { delete[] soln; soln = NULL; PH_SetErrorMessage("Iterative method did not converge within %d iterations.\nConsider using a different numerical method or increasing the maximum number of iterations", iters); }
// catch exceptions: register error, free memory // catch exceptions: register error, free memory
} catch (std::bad_alloc e) { } catch (std::bad_alloc e) {

Loading…
Cancel
Save