Fix memory leak in DSDOT.

This commit is contained in:
Chen-Pang He 2012-09-07 15:21:57 +08:00
parent c86d047c2f
commit 145f89cd5f
2 changed files with 14 additions and 11 deletions

View File

@ -31,8 +31,13 @@ double* cast_vector_to_double(float* x, int n, int incx)
double BLASFUNC(dsdot)(int* n, float* px, int* incx, float* py, int* incy)
{
if(*n <= 0) return 0;
double* x = cast_vector_to_double(px, *n, *incx);
double* y = cast_vector_to_double(py, *n, *incy);
return vector(x,*n).cwiseProduct(vector(y,*n)).sum();
double res = vector(x,*n).cwiseProduct(vector(y,*n)).sum();
delete[] x;
delete[] y;
return res;
}

View File

@ -19,18 +19,16 @@
#include "level2_real_impl.h"
#include "level3_impl.h"
float BLASFUNC(sdsdot)(int* n, float* alpha, float* px, int* incx, float* py, int* incy)
float BLASFUNC(sdsdot)(int* n, float* alpha, float* x, int* incx, float* y, int* incy)
{
float* x = reinterpret_cast<float*>(px);
float* y = reinterpret_cast<float*>(py);
float ret = *alpha;
float res = *alpha;
if(*n>0) {
if(*incx==1 && *incy==1) ret += (vector(x,*n).cwiseProduct(vector(y,*n))).sum();
else if(*incx>0 && *incy>0) ret += (vector(x,*n,*incx).cwiseProduct(vector(y,*n,*incy))).sum();
else if(*incx<0 && *incy>0) ret += (vector(x,*n,-*incx).reverse().cwiseProduct(vector(y,*n,*incy))).sum();
else if(*incx>0 && *incy<0) ret += (vector(x,*n,*incx).cwiseProduct(vector(y,*n,-*incy).reverse())).sum();
else if(*incx<0 && *incy<0) ret += (vector(x,*n,-*incx).reverse().cwiseProduct(vector(y,*n,-*incy).reverse())).sum();
if(*incx==1 && *incy==1) res += (vector(x,*n).cwiseProduct(vector(y,*n))).sum();
else if(*incx>0 && *incy>0) res += (vector(x,*n,*incx).cwiseProduct(vector(y,*n,*incy))).sum();
else if(*incx<0 && *incy>0) res += (vector(x,*n,-*incx).reverse().cwiseProduct(vector(y,*n,*incy))).sum();
else if(*incx>0 && *incy<0) res += (vector(x,*n,*incx).cwiseProduct(vector(y,*n,-*incy).reverse())).sum();
else if(*incx<0 && *incy<0) res += (vector(x,*n,-*incx).reverse().cwiseProduct(vector(y,*n,-*incy).reverse())).sum();
}
return ret;
return res;
}