Commit b5c530373dcf6288da2d3c07bc0117ca3afbf0e3

Authored by Jiaming Guo
1 parent 91589064

fixed memory leak

Showing 1 changed file with 16 additions and 5 deletions   Show diff stats
stim/biomodels/flow.h
@@ -118,6 +118,22 @@ namespace stim { @@ -118,6 +118,22 @@ namespace stim {
118 Q.resize(n_e); 118 Q.resize(n_e);
119 } 119 }
120 120
  121 + void reset(unsigned n_v) {
  122 +
  123 + for (unsigned i = 0; i < n_v; i++) {
  124 + for (unsigned j = 0; j < n_v; j++) {
  125 + C[i][j] = 0;
  126 + }
  127 + }
  128 + }
  129 +
  130 + void clear(unsigned n_v) {
  131 +
  132 + for (unsigned i = 0; i < n_v; i++)
  133 + delete[] C[i];
  134 + delete[] C;
  135 + }
  136 +
121 /// Calculate the inverse of A and store the result in C 137 /// Calculate the inverse of A and store the result in C
122 void inversion(T** A, int order, T* C) { 138 void inversion(T** A, int order, T* C) {
123 139
@@ -128,7 +144,6 @@ namespace stim { @@ -128,7 +144,6 @@ namespace stim {
128 for (unsigned i = 0; i < order; i++) 144 for (unsigned i = 0; i < order; i++)
129 for (unsigned j = 0; j < order; j++) 145 for (unsigned j = 0; j < order; j++)
130 Aflat[i * order + j] = A[i][j]; 146 Aflat[i * order + j] = A[i][j];
131 - //T* Cflat = C;// (T*)malloc(order * order * sizeof(T));  
132 147
133 // create device pointer 148 // create device pointer
134 T* d_Aflat; // flat original matrix 149 T* d_Aflat; // flat original matrix
@@ -178,12 +193,8 @@ namespace stim { @@ -178,12 +193,8 @@ namespace stim {
178 // copy inverse matrix from device to host 193 // copy inverse matrix from device to host
179 HANDLE_ERROR(cudaMemcpy(C, d_Cflat, order * order * sizeof(T), cudaMemcpyDeviceToHost)); 194 HANDLE_ERROR(cudaMemcpy(C, d_Cflat, order * order * sizeof(T), cudaMemcpyDeviceToHost));
180 195
181 - //for(unsigned i = 0; i < order; i++)  
182 - // memcpy(C[i], &Cflat[i*order], order * sizeof(T*));  
183 -  
184 // clear up 196 // clear up
185 free(Aflat); 197 free(Aflat);
186 - //free(Cflat);  
187 HANDLE_ERROR(cudaFree(d_Aflat)); 198 HANDLE_ERROR(cudaFree(d_Aflat));
188 HANDLE_ERROR(cudaFree(d_Cflat)); 199 HANDLE_ERROR(cudaFree(d_Cflat));
189 HANDLE_ERROR(cudaFree(d_A)); 200 HANDLE_ERROR(cudaFree(d_A));