【问题标题】:C++ GMP weird memory managementC++ GMP 奇怪的内存管理
【发布时间】:2016-06-27 10:30:33
【问题描述】:

我是第一次使用 GMP lib,看起来这段代码做了一些脏内存作弊:

void addition (const point p,const point q,const mpz_t fp, point* result){
    mpz_t ld;
    mpz_init(ld);
    lambda_add(p,q,fp,ld);

    gmp_printf( "WTFCHECK1:  %Zx, %Zx\n", p.x ,p.y);
    mpz_mul(result->x,ld,ld);
    gmp_printf( "WTFCHECK2:  %Zx, %Zx\n", p.x ,p.y);
    mpz_sub(result->x,result->x,p.x);
    gmp_printf( "WTFCHECK3:  %Zx, %Zx\n", p.x ,p.y);
...
}

lambda 的样子

void lambda_add (const point p,const point q,const mpz_t fp, mpz_t result){
    mpz_t ydiff,xdiff;
    mpz_init (ydiff);       
    mpz_init (xdiff);

    mpz_sub (ydiff,q.y,p.y);
    mpz_sub (xdiff,q.x,p.x);
...//no more usage of p or q
}

但程序输出仍然是这样的:

WTFCHECK1:  7cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978, 7775510db8ed040293d9ac69f7430dbba7dade63ce982299e04b79d227873d1
WTFCHECK2:  de8a6886d284cb85d49a93b707475ed3d277242444ba9e860207f9a59a9ef351, 7775510db8ed040293d9ac69f7430dbba7dade63ce982299e04b79d227873d1

如你所见,mpz_t类型的变量px(x和y是typedef结构点中的mpz_t类型)在没有我的情况下发生了变化分配任何东西。这种行为的原因是什么?谢谢。

【问题讨论】:

  • 您可能需要发布p、q 和result 的设置以及对addition 的调用。如果您注释掉对lambda_add 的调用会怎样?
  • 没有 MCVE 不能说太多。请注意,如果您使用 GMP 附带的标头 <gmpxx.h> 以及它提供的类型 mpz_class,可能会节省很多麻烦。

标签: c++ memory gmp


【解决方案1】:

好的,:D 问题有点在我这边,我正在打电话 addition (const point p,const point q,const mpz_t fp, point* result) 具有与点 p 和点*结果相同的结构,因此在修改结果的同时,我也在修改点 p。无论如何,我感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    相关资源
    最近更新 更多