2016-05-17 8 views
1

Ich verwende die PBC Bibliothek für ein Projekt, und ich versuche, eine element_t Array, wo einige Daten zu speichern.Segmentierungsfehler in element_t Array

Ich bekomme eine segmentation fault Fehler beim Debuggen mit gdb, wenn ich versuche, ein element_t in das Array zu kopieren. Hier

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

ich dies als eine Fehlermeldung anzeigt:

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

Wie jemand schon versucht Putting element_t s in Arrays?

+0

ich nicht über diese Bibliothek wissen aber wo ist " n "definiert? – user1754322

+0

Entschuldigung, ich habe diese Zeile beim Kopieren vergessen. Es ist eine ganze Zahl, gleich wie t. – EisenHeim

+0

Ich rate, dass 'element_t' initialisiert werden muss. Wenn dies der Fall ist, sollte die Initialisierung mit 'element_t r [t] = {}' Ihr Problem lösen. –

Antwort

0

Wie in den Kommentaren diskutiert wurde, kam der Fehler von nicht initialisasing der element_t

Hier ist die MWE korrigiert, das funktioniert:

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