g++;:分段故障(堆芯转储) 我在C++中有一个叫SooSc.cp的代码。我有一个C语言库。我使用Cygwin并运行:g++source.cpp-L/cygdrive/C/Cygwin/home/Win7/libpaillier-L:libpaillier.a-lgmpxx-lgmp创建一个.exe文件,然后运行它。最后我得到了“分段错误(堆芯转储)”。我需要知道为什么我会犯这个错误
Source.cpp:g++;:分段故障(堆芯转储) 我在C++中有一个叫SooSc.cp的代码。我有一个C语言库。我使用Cygwin并运行:g++source.cpp-L/cygdrive/C/Cygwin/home/Win7/libpaillier-L:libpaillier.a-lgmpxx-lgmp创建一个.exe文件,然后运行它。最后我得到了“分段错误(堆芯转储)”。我需要知道为什么我会犯这个错误,c++,g++,cygwin,implementation,C++,G++,Cygwin,Implementation,Source.cpp: #include<iostream> #include<gmp.h> #include <gmpxx.h> using namespace std; #include <string> extern "C"{ #include<paillier.h> } #include<math.h> #include <stdio.h> #include <stdlib.h> int
#include<iostream>
#include<gmp.h>
#include <gmpxx.h>
using namespace std;
#include <string>
extern "C"{
#include<paillier.h>
}
#include<math.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
paillier_pubkey_t* pu;//The public key
paillier_prvkey_t* pr;//The private key
paillier_get_rand_t get_rand;
paillier_keygen(1024, &pu,&pr, get_rand );
return 0;
}
#包括
#包括
#包括
使用名称空间std;
#包括
外部“C”{
#包括
}
#包括
#包括
#包括
int main(){
paillier\u pubkey\u t*pu;//公钥
paillier\u prvkey\u t*pr;//私钥
佩利尔得到了,但没有得到;
佩利尔·凯根(1024,&pu,&pr,格特兰);
返回0;
}
Paillier库:您声明了一个指向随机函数的指针(
Paillier\u get\u rand\u t get\u rand;
),但尚未将其初始化为指向函数。现在,当您将此指针传递到试图调用它(应该)指向的函数的paillier\u keygen
时,您将得到一个segfault
正如@TartanLlama所提到的,该库提供了两个随机数生成函数,您可以使用它们初始化指针(或直接将它们传递给函数):paillier\u get\u rand\u devrandom
和paillier\u get\u rand\u devurandom
您还可以使用另一个RNG函数。只需确保它的头与所讨论的函数指针类型兼容:typedef void(*paillier_get_rand_t)(void*buf,int len)代码>()。此外,您希望它符合库的要求,即生成len
字节的随机字节序列,并将其存储在buf
中
编辑:我最初误读了您的代码,这就是为什么我谈到了几个指针您需要将有效的随机生成器作为最后一个参数传递给paillier\u keygen
。该库提供了两种可供使用的功能:
paillier_keygen(1024, &pu,&pr, paillier_get_rand_devrandom);
paillier_keygen(1024, &pu,&pr, paillier_get_rand_devurandom);
您是否尝试过使用调试器?函数paillier\u keygen
需要一个有效的函数指针作为其最后一个参数。文档建议您选择两个。我是cygwin的新手,您能告诉我怎么做吗?您是否签出了此()文件?库函数将分配它们。