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阵列?
答
正如在评论中讨论,从没有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;
}
我不知道这个库,但哪里是“ n“定义? – user1754322
对不起,复制时我忘了这一行。这是一个整数,与t相同。 – EisenHeim
我会猜测'element_t'需要被初始化。如果是这种情况,用'element_t r [t] = {}'初始化应该可以解决你的问题。 –