--- fflas-ffpack/ffpack/ffpack_charpoly.inl.orig 2019-06-11 05:40:10.000000000 -0600
+++ fflas-ffpack/ffpack/ffpack_charpoly.inl 2019-07-19 08:50:15.774948327 -0600
@@ -90,11 +90,11 @@ namespace FFPACK {
if (p < (uint64_t)N) // Heuristic condition (the pessimistic theoretical one being p<2n^2).
return CharPoly(R, charp, N, A, lda, G, FfpackLUK);
do{
+ typename Field::Element_ptr B = nullptr;
cont=false;
try {
// Preconditionning by a random block Krylov matrix.
// Some invariant factors may be discovered in the process and are stored in charp.
- typename Field::Element_ptr B;
size_t ldb, Nb;
Protected::RandomKrylovPrecond (R, charp, N, A, lda, Nb, B, ldb, G, degree);
// Calling the main algorithm on the preconditionned part
@@ -102,6 +102,8 @@ namespace FFPACK {
FFLAS::fflas_delete(B);
}
catch (CharpolyFailed){
+ if (B != nullptr)
+ FFLAS::fflas_delete(B);
charp.clear();
if (++attempts < 2)
cont = true;
--- fflas-ffpack/ffpack/ffpack_frobenius.inl.orig 2019-06-11 05:40:10.000000000 -0600
+++ fflas-ffpack/ffpack/ffpack_frobenius.inl 2019-07-18 16:46:14.217559319 -0600
@@ -278,8 +278,7 @@ namespace FFPACK { namespace Protected {
std::cerr<<" left-over : "<<timrest.usertime()<<std::endl;
#endif
- FFLAS::fflas_delete( Pk);
- FFLAS::fflas_delete( Qk);
+ FFLAS::fflas_delete (K, K3, Pk, Qk);
for (size_t i=0; i<Mk; ++i)
dA[i] = dK[i];
bk_idx = 0;
@@ -290,7 +289,7 @@ namespace FFPACK { namespace Protected {
for (size_t j=0; j<Ma; ++j)
FFLAS::fassign(F, Ncurr, K4+j*ldk, 1, B+j, ldb);
- FFLAS::fflas_delete (K4);
+ FFLAS::fflas_delete (dA, dK, K4);
}
@@ -338,6 +337,7 @@ namespace FFPACK { namespace Protected {
// Main loop of the arithmetic progession
while ((nb_full_blocks >= 1) && (Mk > 1)) {
size_t block_idx, it_idx, rp_val;
+ FFLAS::fflas_delete (K);
K = FFLAS::fflas_new (F, Ncurr, Ma);
K3 = FFLAS::fflas_new (F, Ncurr, Ma);
ldk = Ma;
@@ -507,9 +507,6 @@ namespace FFPACK { namespace Protected {
deg++;
FFLAS::fflas_delete (K3, rp);
- if ((nb_full_blocks > 0) && (Mk > 1))
- FFLAS::fflas_delete(K);
-
}
// Recovery of the first invariant factor
--- fflas-ffpack/ffpack/ffpack_fsytrf.inl.orig 2019-06-11 05:40:10.000000000 -0600
+++ fflas-ffpack/ffpack/ffpack_fsytrf.inl 2019-07-18 15:55:56.520004205 -0600
@@ -462,6 +462,7 @@ namespace FFPACK {
FFLAS::fflas_delete( P1);
FFLAS::fflas_delete( P2);
FFLAS::fflas_delete( P3);
+ FFLAS::fflas_delete( Q2);
for (size_t i=N1; i<N; ++i)
MathP[i] += N1;
@@ -486,6 +487,7 @@ namespace FFPACK {
}
FFLAS::fassign(Fi, R1, R3, tmpV1+N1-R1+R2, dim, A+R1+2*R2, lda);
FFLAS::fassign(Fi, R1, N1-R1-R2, tmpV1+R2, dim, A+R1+2*R2+R3, lda);
+ FFLAS::fflas_delete(tmpV1);
if (R2){
// Interleaving L2^T, U2 and H1 into
@@ -563,7 +565,7 @@ namespace FFPACK {
std::copy(tmpi, tmpi+N1-R1-R2, MP1);
MathPerm2LAPACKPerm (P, MathP, N);
- FFLAS::fflas_delete( MathP);
+ FFLAS::fflas_delete( MathP, tmpP );
// Reporting the 2x2 blocks in P
for (size_t i=0; i<R1+2*R2+R3; i++){
--- fflas-ffpack/ffpack/ffpack_invert.inl.orig 2019-06-11 05:40:10.000000000 -0600
+++ fflas-ffpack/ffpack/ffpack_invert.inl 2019-07-18 15:53:17.281717508 -0600
@@ -49,8 +49,8 @@ namespace FFPACK {
size_t R = ReducedRowEchelonForm (F, M, M, A, lda, P, Q, true, FfpackGaussJordanTile);
nullity = (int)(M - R);
applyP (F, FFLAS::FflasRight, FFLAS::FflasNoTrans, M, 0, (int)R, A, lda, P);
- delete [] P;
- delete [] Q;
+ FFLAS::fflas_delete(P);
+ FFLAS::fflas_delete(Q);
checker.check(A,nullity);
return A;
--- tests/test-fsyr2k.C.orig 2019-06-11 05:40:10.000000000 -0600
+++ tests/test-fsyr2k.C 2019-07-18 15:26:32.925307334 -0600
@@ -105,6 +105,7 @@ bool check_fsyr2k (const Field &F, size_
}
FFLAS::fflas_delete(A);
+ FFLAS::fflas_delete(B);
FFLAS::fflas_delete(C2);
FFLAS::fflas_delete(C);
return ok;
--- tests/test-fsyrk.C.orig 2019-06-11 05:40:10.000000000 -0600
+++ tests/test-fsyrk.C 2019-07-18 15:29:27.289490845 -0600
@@ -176,6 +176,7 @@ bool check_fsyrk_diag (const Field &F, s
}
if (!ok){
std::cerr<<"Scaling failed"<<std::endl;
+ FFLAS::fflas_delete(A, B, C, C2, D);
return ok;
}
@@ -200,6 +201,7 @@ bool check_fsyrk_diag (const Field &F, s
cout << "FAILED ("<<time<<")"<<endl;
FFLAS::fflas_delete(A);
+ FFLAS::fflas_delete(B);
FFLAS::fflas_delete(C2);
FFLAS::fflas_delete(C);
FFLAS::fflas_delete(D);
@@ -300,7 +302,7 @@ bool check_fsyrk_bkdiag (const Field &F,
std::cerr<<"Scaling failed"<<std::endl;
std::cerr<<"alpha = "<<alpha<<" beta="<<beta<<std::endl;
std::cerr<<"tb = "<<tb<<std::endl;
-
+ FFLAS::fflas_delete(A, B, C, C2, D);
return ok;
}
@@ -329,6 +331,7 @@ bool check_fsyrk_bkdiag (const Field &F,
//cerr<<"FAILED ("<<time<<")"<<endl;
FFLAS::fflas_delete(A);
+ FFLAS::fflas_delete(B);
FFLAS::fflas_delete(C2);
FFLAS::fflas_delete(C);
FFLAS::fflas_delete(D);
--- tests/test-nullspace.C.orig 2019-06-11 05:40:10.000000000 -0600
+++ tests/test-nullspace.C 2019-07-18 16:05:18.806078927 -0600
@@ -91,6 +91,7 @@ bool test_nullspace(Field& F, FFLAS::FFL
size_t NSdim = 0u;
typename Field::Element_ptr NS;
FFPACK::NullSpaceBasis(F, side, m, n, ACopy, lda, NS, ldns, NSdim);
+ FFLAS::fflas_delete(ACopy);
#if defined(__FFLAS_FFPACK_DEBUG)
std::cout << std::endl;
@@ -103,7 +104,9 @@ bool test_nullspace(Field& F, FFLAS::FFL
// Ensure nullspace is full rank
auto NSCopy = FFLAS::fflas_new(F, n, NSdim);
FFLAS::fassign(F, n, NSdim, NS, NSdim, NSCopy, NSdim);
- if (FFPACK::Rank(F, n, NSdim, NSCopy, NSdim) != NSdim) return false;
+ size_t rank = FFPACK::Rank(F, n, NSdim, NSCopy, NSdim);
+ FFLAS::fflas_delete(NSCopy);
+ if (rank != NSdim) return false;
// Check that NS is a nullspace
auto C = FFLAS::fflas_new(F, m, NSdim);
@@ -118,7 +121,9 @@ bool test_nullspace(Field& F, FFLAS::FFL
// Ensure nullspace is full rank
auto NSCopy = FFLAS::fflas_new(F, NSdim, m);
FFLAS::fassign(F, NSdim, m, NS, m, NSCopy, m);
- if (FFPACK::Rank(F, NSdim, m, NSCopy, m) != NSdim) return false;
+ size_t rank = FFPACK::Rank(F, NSdim, m, NSCopy, m);
+ FFLAS::fflas_delete(NSCopy);
+ if (rank != NSdim) return false;
// Check that NS is a nullspace
auto C = FFLAS::fflas_new(F, NSdim, n);
--- tests/test-rpm.C.orig 2019-06-11 05:40:10.000000000 -0600
+++ tests/test-rpm.C 2019-07-18 16:43:53.661953364 -0600
@@ -79,6 +79,7 @@ bool checkSymmetricRPM (size_t N, size_t
ok=false;
cerr<<"A["<<i<<", "<<j<<"] = "<<A[i*N+j]<<" != A["<<j<<", "<<i<<"]"<<std::endl;
}
+ fflas_delete(A);
if (!ok){
std::cerr<<"RPM FAILED"<<std::endl;