瓦尔格林德的泄漏预防

Leakage prevention in Valgrind

本文关键字:泄漏 林德      更新时间:2023-10-16
    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的回复

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

大概,您忘记在从函数返回之前删除数组。由于很难做到这一点(以防引发异常),请使用 RAII 来管理数组:

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

并根据需要uni.data()vni.data()访问原始数组。

如果您出于某种原因真的想自己玩弄指针,请记住删除 delete [] 以匹配new [] .请记住在每个可能的返回路径上执行此操作;即便如此,如果有任何异常,您也会有泄漏。