element_t数组中的分割错误

问题描述:

我使用PBC库作为项目,并尝试使用element_t数组,以在其中存储某些数据。element_t数组中的分割错误

当我尝试将element_t复制到数组中时,在调试gdb时出现segmentation fault错误。

这里是一个MWE:

using namespace std; 
#include <stdio.h> 
#include <iostream> 
#include <iomanip> 

#include <pbc.h> 
#include <pbc_test.h> 

int main(int argc, char **argv) { 

    const int t = 2; 
    const int n = 3; 
    element_t r[t]; 
    element_t s[n]; 
    pairing_t pairing; 
    element_t P, s0, P0; 

    pbc_demo_pairing_init(pairing, argc, argv); 

    cout<<"SETUP STAGE"<<endl; 

    element_init_G1(P, pairing); 
    element_random(P); 
    element_printf("P = \t%B\n", P); 

    /* Build the table with each element is r_i */ 
    element_t r_i; 
    for (int i = 0; i < t; i++) 
    { 
     element_init_Zr(r_i, pairing); 
     element_random(r_i); 
     /* Put r_i into the array */ 
     element_set(r[i], r_i); // <--- segmentation fault here 
     element_clear(r_i); 

    } 
    /* Set s = r0 */ 
    element_init_Zr(s0, pairing); 
    element_random(s0); 
    /* Put it in the first place in the vector of all si */ 
    element_set(s[0], r[0]); 

    /* Compute P = s*P0 */ 
    element_mul_zn(P0, P, s0); 
    element_printf("P0 = %B\n", P0); 

    element_clear(P); 

    pairing_clear(pairing); 

    return 0; 
} 

我得到这个错误为:

Program received signal SIGSEGV, Segmentation fault. 
0x000000000002721f in ??() 

正如有人已经试图把element_t S IN阵列?

+0

我不知道这个库,但哪里是“ n“定义? – user1754322

+0

对不起,复制时我忘了这一行。这是一个整数,与t相同。 – EisenHeim

+0

我会猜测'element_t'需要被初始化。如果是这种情况,用'element_t r [t] = {}'初始化应该可以解决你的问题。 –

正如在评论中讨论,从没有initialisasing的element_t

附带的错误下面是纠正MWE,它的工作原理:

using namespace std; 
#include <stdio.h> 
#include <iostream> 
#include <iomanip> 

#include <pbc.h> 
#include <pbc_test.h> 

int main(int argc, char **argv) { 

    const int t = 2; 
    const int n = 3; 
    element_t r[t]; 
    element_t s[n]; 
    pairing_t pairing; 
    element_t P, s0, P0; 
     element_init_G1(P, pairing); 
     element_init_Zr(s0, pairing); 
     element_init_G1(P0, pairing); 


    pbc_demo_pairing_init(pairing, argc, argv); 

    cout<<"SETUP STAGE"<<endl; 

    element_random(P); 
    element_printf("P = \t%B\n", P); 

    /* Build the table with each element is r_i */ 
    element_t r_i; 
    for (int i = 0; i < t; i++) 
    { 
     element_init_Zr(r[i], pairing); // Resolved the problem 
     element_init_Zr(r_i, pairing); 

     element_random(r_i); 
     /* Put r_i into the array */ 
     element_set(r[i], r_i); 
     element_clear(r_i); 

    } 
    /* Set s = r0 */ 
    element_random(s0); 

    /* Put it in the first place in the vector of all si */ 
    element_init_Zr(s[0], pairing); 
    element_set(s[0], r[0]); 

    /* Compute P = s*P0 */ 
    element_mul_zn(P0, P, s0); 
    element_printf("P0 = %B\n", P0); 

    element_clear(P); 

    pairing_clear(pairing); 

    return 0; 
}