美文网首页
给已经写好的 递归函数 添加 释放内存 代码 的方法

给已经写好的 递归函数 添加 释放内存 代码 的方法

作者: 星星之火666 | 来源:发表于2019-04-26 11:04 被阅读0次
  • 如题,这是 sm2 国密算法中 常数 乘以 点 坐标 的一段 代码,现在想要 释放 t1 点坐标 内存,该如何添加 释放内存 代码呢?:(部分代码)
point sm2::oval_multiply(BIGNUM* k, point G)  // 参数 不 改变!  // 所有 new 均已释放
{
    /*  返回值 需要 BN_free()
        椭圆曲线上的点乘以常数 k
        :param k: int 型 k*G 中的 k
        :param G: 生成元,基点
        :return: 相乘之后的点
    */
    //  if k==1:
    //     return G   // 只有 k 取 1 时,才有这种可能
    static BN_CTX* ctx = BN_CTX_new();
    static BIGNUM* rem = BN_new(), * div = BN_new(), * div1 = BN_new(), * two = BN_new();

    static point t, t1; // 即 t 、t1 初始值 ={}  // 临时 点  temp
    BN_set_word(two, 2);

    BN_nnmod(rem, k, two, ctx);
    BN_div(div, NULL, k, two, ctx);

    if (BN_is_word(k, 2))
    {
        //// 释放内存
        //BN_free(two);
        //BN_CTX_free(ctx);
        //BN_free(rem);
        //BN_free(div);
        //BN_free(div1);

        // 是 t1 第一次出现的地方
        t1 = oval_same_add(G);
        return t1;
    }

    if (BN_is_word(k, 3))
    {
        //// 释放内存
        //BN_free(two);
        //BN_CTX_free(ctx);
        //BN_free(rem);
        //BN_free(div);
        //BN_free(div1);

        t = oval_same_add(G);

        // 是 t1 第一次出现的地方
        t1 = oval_diff_add(G, t);
        t.point_free(t);
        return t1;
    }

    if (BN_is_zero(rem))
    {
        BN_copy(div1, div);
        t = oval_multiply(div1, G);
        t1 = oval_same_add(t);
        t.point_free(t);
        return t1;
    }

    if (BN_is_one(rem))
    {
        BN_copy(div1, div);
        t = oval_multiply(div1, G);
        t1 = oval_diff_add_near(t, G);
        t.point_free(t);
        return t1;
    }
}
  • 添加方法:

先给定具体实际参数,然后将此函数的代码执行过程,一一写到纸上(像伪代码一样的过程,不要害怕重复),然后添加 t1 点坐标 释放内存代码,即可 ( 这样可以比较清晰的添加代码,不易出错 )

  • 附注:

因为此函数返回的指针指向一片内存,并且 将 t1 赋给 t,所以 t 和 旧的 t1 指针,指向同一片内存,所以释放 t ,相当于 释放 旧的 t1 指向的内存,所以不能添加 释放 t1 点坐标的内存代码。

相关文章

  • 给已经写好的 递归函数 添加 释放内存 代码 的方法

    如题,这是 sm2 国密算法中 常数 乘以 点 坐标 的一段 代码,现在想要 释放 t1 点坐标 内存,该如何添加...

  • C语言-使用递归的方法求n!

    问题描述:使用递归的方法求n! 源代码: 运行结果: 程序心得: 递归函数编程时,要抓住递归方法的两个方法:递归出...

  • JavaScript 内存溢出与内存泄露

    闭包的缺点 函数执行完之后,函数内的局部变量没有释放,占用内存的时间会变长。容易造成内存泄露。 上述代码没有释放a...

  • js 总结六 7-18

    递归 递归技巧 假设递归函数已经写好 寻找递推关系 将递推关系的结构转换为递归体 将临界条件加入到递归体中递归思想...

  • 一个Swift中deinit方法中设置断点不生效的问题

    在iOS开发中,有时候我们为了调试我们写的页面代码是否有内存泄漏,会在ViewController的释放方法中添加...

  • 2019-03-08

    方法 1.方法的执行过程中的内存分析 2.方法的重载机制 3.方法的递归调用 内存分析 方法区内存:代码片段——S...

  • C语言学习十 — 递归&可变参数&内存管理

    递归 博客中代码已上传github,点击此处即可到达递归指的是在函数的定义中使用函数自身的方法。 语法格式如下: ...

  • Python语言程序---代码复用与函数递归(二)

    Python语言程序---代码复用与函数递归(二) 函数递归 在函数定义中,调用函数自身的方式就是递归。 递归并不...

  • 递归函数基础

    函数代码中调用自己时称为递归,该函数被称为递归函数。递归函数是一个很高效的 开发技巧,可以极大的简化代码提高开发效...

  • Runtime学习(二)

    动态添加方法如果一个类的方法非常多,加载类方法到内存的时候比较消耗资源,可以使用动态给摸一个类,添加方法 上面代码...

网友评论

      本文标题:给已经写好的 递归函数 添加 释放内存 代码 的方法

      本文链接:https://www.haomeiwen.com/subject/wcqfnqtx.html