g ++:分段错误(核心转储)

时间:2015-02-10 12:27:53

标签: c++ g++ cygwin implementation

我在C ++中有一个名为source.cpp的代码。我在C中有一个库。我使用Cygwin并运行:g ++ source.cpp -L / cygdrive / c / cygwin / home / Win7 / libpaillier -l:libpaillier.a -lgmpxx -lgmp创建一个.exe文件然后运行。最后我得到了#34;分段错误(核心转储)"。我需要知道为什么我会收到此错误。

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 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;
}

Paillier图书馆:http://acsc.cs.utexas.edu/libpaillier/

2 个答案:

答案 0 :(得分:1)

您需要将有效的随机生成器作为paillier_keygen的最后一个参数传递。该库提供了两个您可以使用的文件:

paillier_keygen(1024, &pu,&pr, paillier_get_rand_devrandom);
paillier_keygen(1024, &pu,&pr, paillier_get_rand_devurandom);

答案 1 :(得分:0)

您已声明指向随机函数(paillier_get_rand_t get_rand;)的指针,但尚未将其初始化为指向函数。现在,当您将此指针传递给试图调用它应该指向的函数的paillier_keygen时,您会得到一个段错误。

正如@TartanLlama所提到的,有问题的库提供了两个随机数生成函数,您可以使用它们初始化指针(或直接将它们传递给函数):paillier_get_rand_devrandompaillier_get_rand_devurandom

您还可以使用其他RNG功能。只需确保它有一个与所讨论的函数指针类型兼容的标头:typedef void (*paillier_get_rand_t) ( void* buf, int len );relevant SO question)。此外,您希望它符合库的要求,即生成len个字节的随机字节序列并将其存储在buf中。

编辑:我最初误读了你的代码,这就是我谈到几个指针的原因