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, %Zxn", p.x ,p.y);
mpz_mul(result->x,ld,ld);
gmp_printf( "WTFCHECK2: %Zx, %Zxn", p.x ,p.y);
mpz_sub(result->x,result->x,p.x);
gmp_printf( "WTFCHECK3: %Zx, %Zxn", 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 是 typedef 结构点中的mpz_t类型)已更改,而无需我在其中分配任何内容。这种行为的原因是什么?谢谢。
好的,:D问题有点在我这边,我打电话 addition (const point p,const point q,const mpz_t fp, point* result)
具有与点 p 和点 * 结果相同的结构,因此除了修改结果外,我还修改了点 p。无论如何,我感谢您的帮助。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- C++将字符串传递给 C 库以进行内存管理
- 从函数返回时C++内存管理
- 函数指针和 lambda 的内存管理
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- C++中的内存管理
- C和C++中的内存管理有什么区别
- 字符 * 未从重载运算符或内存管理问题正确返回
- 如何在源代码中使用执行策略检测 C++17 的扩展内存管理算法的可用性?
- 底层指针和内存管理
- 智能指针,避免使用QNetworkAccessManager时进行手动内存管理
- c++中的内存管理问题
- 使用矢量时的内存管理
- 循环和内存管理中的指针算术C++?
- C++堆栈内存管理问题
- C 内存管理中的课程如何管理 - 研究
- 不可变数据模型的内存管理
- C++ 使用数组初始化时的 STL 向量内存管理
- SFML 纹理内存管理