研究でC言語のプログラムを書いています。
研究内容は長くなるので省きますが、TEPLAという暗号計算ライブラリを用いて楕円曲線上で鍵生成をするプログラムを作成しました。
Cygwin上のgccでコンパイルは通りexeファイルも生成されているのですが、実行するとタイトル通りSegmentation fault (コアダンプ)が出ます。

原因を探ろうとソースコードを小分けにして実行したところ、keygen.c内のgrxやgを使用した関数で止まっているようです。しかし、解決法が分からない(なぜここで止まるのかがわからない)ので考えられる問題点や解決法を教えていただけると幸いです。

以下にソースコードを記載します。
長くなって申し訳ありませんが、よろしくおねがいします。

integrated.h

#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<tepla/ec.h>

//Path for various files
#define KEYPATH "slot/publickey.txt"

//Define global variables
EC_PAIRING p;
EC_POINT g;
EC_POINT publickey;
gmp_randstate_t state;
mpz_t grx;

//Define external function
//extern void keygen();

void Init_tepla();

//To initialize tepla
void Init_tepla()
{
    printf("Initialize tepla\n");
    pairing_init(p, "ECBN254a");
    point_init(g, p->g1);
    point_random(g);

    mpz_init(grx);
    gmp_randinit_default(state);
    gmp_randseed_ui(state, (unsigned)time(NULL));
    mpz_urandomb(grx, state, 64);
}

main.c

//Define external function
extern void keygen();

int main()
{
    keygen();

    return 0;
}

keygen.c

#include"integrated.h"

void keygen()
{
    FILE *fp;
    mpz_t x;
    int size;

    fp = fopen(KEYPATH, "w");

    Init_tepla();

    printf("Try to make keys.\n");
    mpz_set(x, grx);     //Aborted
    point_mul(publickey, x, g);    //Core dump

    size = point_get_str_length(publickey);
    char *strkey = (char*)malloc(sizeof(char)*size);
    point_get_str(strkey, publickey);     //Core dump

    printf("Make keys!\nSave public key to %s\n", KEYPATH);
    fputs(strkey, fp);
    free(strkey);
    fclose(fp);
}