Commit ef1f6218acf191048e6af44b743f3ac68dcfea79

Authored by David Mayerich
1 parent 0a04ac9d

fixed some memory stability issues

Showing 1 changed file with 16 additions and 14 deletions   Show diff stats
stim/math/matrix.h
@@ -51,28 +51,24 @@ public: @@ -51,28 +51,24 @@ public:
51 matrix(size_t rows, size_t cols) { 51 matrix(size_t rows, size_t cols) {
52 R = rows; 52 R = rows;
53 C = cols; 53 C = cols;
54 - if (R * C == 0)  
55 - M = NULL;  
56 - else  
57 - M = new T[R * C]; 54 + M = NULL;
  55 + if (R * C > 0)
  56 + M = (T*) malloc(R * C * sizeof(T));
58 } 57 }
59 58
60 - matrix(size_t rows, size_t cols, T* data) { 59 + matrix(size_t rows, size_t cols, const T* data) {
61 R = rows; 60 R = rows;
62 C = cols; 61 C = cols;
63 - if (R * C == 0)  
64 - M = NULL;  
65 - else  
66 - M = new T[R * C]; 62 + M = NULL;
  63 + if (R * C > 0)
  64 + M = (T*)malloc(R * C * sizeof(T));
67 memcpy(M, data, R * C * sizeof(T)); 65 memcpy(M, data, R * C * sizeof(T));
68 } 66 }
69 67
70 matrix(const matrix<T>& cpy){ 68 matrix(const matrix<T>& cpy){
71 -  
72 - if (cpy.R * cpy.C == 0)  
73 - M = NULL;  
74 - else  
75 - M = new T[cpy.R * cpy.C]; 69 + M = NULL;
  70 + if (cpy.R * cpy.C > 0)
  71 + M = (T*)malloc(cpy.R * cpy.C * sizeof(T));
76 memcpy(M, cpy.M, cpy.R * cpy.C * sizeof(T)); 72 memcpy(M, cpy.M, cpy.R * cpy.C * sizeof(T));
77 73
78 R = cpy.R; 74 R = cpy.R;
@@ -222,6 +218,12 @@ public: @@ -222,6 +218,12 @@ public:
222 return result; 218 return result;
223 } 219 }
224 220
  221 + // Reshapes the matrix in place
  222 + void reshape(size_t rows, size_t cols) {
  223 + R = rows;
  224 + C = cols;
  225 + }
  226 +
225 ///Calculate and return the determinant of the matrix 227 ///Calculate and return the determinant of the matrix
226 T det() const { 228 T det() const {
227 if (R != C) { 229 if (R != C) {