C++ GMP 奇怪的内存管理
C++ GMP weird memory management
我是第一次使用 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的变量p.x(x和y是mpz_t type in typedef structure point) 已经改变了,我没有给它赋值。这种行为的原因是什么?谢谢
好的,:D 问题有点出在我这边,我正在打电话
addition (const point p,const point q,const mpz_t fp, point* result)
具有与点 p 和点* 结果相同的结构,因此在修改结果的同时,我也在修改点 p。无论如何,我感谢你的帮助。
我是第一次使用 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的变量p.x(x和y是mpz_t type in typedef structure point) 已经改变了,我没有给它赋值。这种行为的原因是什么?谢谢
好的,:D 问题有点出在我这边,我正在打电话
addition (const point p,const point q,const mpz_t fp, point* result)
具有与点 p 和点* 结果相同的结构,因此在修改结果的同时,我也在修改点 p。无论如何,我感谢你的帮助。