2013-09-30 81 views
0
void update(int s) { 
68  double *ungfi = new double[arraysisasazei]; 
69  double *vnsasai = new double[arraysizasaei]; 
70  deriv(dvsasi,vnsasai); 
71  deriv(dusaasi,ungfi); 

上面的代碼是引起我的錯誤,謝謝kerrek SB的答覆泄漏預防Valgrind的

==745== 800,000 bytes in 1,000 blocks are definitely lost in loss record 1 of 2 

回答

0

想必,你忘了從函數返回之前刪除陣列。因爲它是很難獲得這種權利(如果拋出一個異常),使用RAII來管理陣列:

std::vector<double> uni(arraysizei); 
std::vector<double> vni(arraysizei); 

和訪問原始數組作爲uni.data()vni.data()如果您需要。

如果您真的覺得自己出於某種原因想要自己玩弄指針,請記得用delete []刪除以匹配new []。請記住在每個可能的返回路徑上執行此操作;即使這樣,如果有任何事情拋出異常,你也會發生泄漏。

+0

如果我使用delete [] uni;在'刪除'之前,我得到了一個預期的非限定標識的錯誤 – user2830047

+0

@ user2830047:你在函數返回前添加了delete *函數嗎?如果我(錯誤地)將它*放在函數外面,我會得到該錯誤。 –

+0

@ user2830047:如果你真的,真的想自己使用'delete',儘管我的建議,確保你覆蓋每一個可能的回報路徑。即使那樣,如果有任何事情拋出異常,你很可能會泄漏。使用RAII來管理動態資源要好得多。 –