Hi I created a new data type, and then I wanted to create a GIN index for it, but when I created the index, the program would crash 。 The version of postgresql is 9.6。 The following is part of the code, and I also refer to the code of intarray. ```sqlCREATE OR REPLACE FUNCTION geomgrid_in(cstring) RETURNS geomgrid AS '$libdir/module-1.0','geomgrid_in' LANGUAGE 'c' NOT FENCED IMMUTABLE STRICT ; CREATE OR REPLACE FUNCTION geomgrid_out(geomgrid) RETURNS cstring AS '$libdir/module-1.0','geomgrid_out' LANGUAGE 'c' NOT FENCED IMMUTABLE STRICT ; CREATE OR REPLACE FUNCTION geomgrid_recv(internal) RETURNS geomgrid AS '$libdir/module-1.0','geomgrid_recv' LANGUAGE 'c' NOT FENCED IMMUTABLE STRICT ; CREATE OR REPLACE FUNCTION geomgrid_send(geomgrid) RETURNS bytea AS '$libdir/module-1.0','geomgrid_send' LANGUAGE 'c' NOT FENCED IMMUTABLE STRICT ; CREATE TYPE geomgrid( internallength = 8, input = geomgrid_in, output = geomgrid_out, send = geomgrid_send, receive = geomgrid_recv, alignment = double, PASSEDBYVALUE = true, storage = plain); CREATE OPERATOR CLASS gin_grid_opsDEFAULT FOR TYPE _geomgrid USING ginAS OPERATOR 3 &&, OPERATOR 6 = (anyarray, anyarray), OPERATOR 7 @>, OPERATOR 8 <@, FUNCTION 1 grid_cmp(geomgrid,geomgrid), FUNCTION 2 gridarray_extract (anyarray, internal, internal), FUNCTION 3 gridarray_queryextract (geomgrid, internal, int2, internal, internal, internal, internal),``` ```cDatum geomgrid_in(PG_FUNCTION_ARGS){ char *input = PG_GETARG_CSTRING(0); int len = strlen(input); if (len != 16) PG_RETURN_NULL(); char *data = palloc(len / 2 ); for (int i = 0, j = 7; i < len; i += 2, j--) { data[j] = Char2Hex(input + i); } int64_t* return_data = (int64_t*)data; PG_RETURN_INT64(*return_data);} Datum geomgrid_out(PG_FUNCTION_ARGS){ int64_t out_data = PG_GETARG_INT64(0); char* buf_data = (char*)(&out_data); unsigned char dst[2] = {0}; char *result = palloc(16 + 1); memset(result, 0, 16 + 1); for (int i = 7, j = 0; i >= 0; i--, j++) { Hex2Char((unsigned char)buf_data[i], dst); result[j * 2 + 1] = dst[0]; result[j * 2] = dst[1]; } PG_RETURN_CSTRING(result);}``` ```cDatum gridarray_extract(PG_FUNCTION_ARGS){ ArrayType *array = PG_GETARG_ARRAYTYPE_P_COPY(0); int size = VARSIZE(array); int32 *nkeys = (int32 *)PG_GETARG_POINTER(1); bool **nullFlags = (bool **)PG_GETARG_POINTER(2); if (array == NULL || nkeys == NULL || nullFlags == NULL) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("Invalid arguments for function gridarray_extract"))); int16 elmlen; bool elmbyval = false; char elmalign; Datum *elems = NULL; bool *nulls = NULL; int nelems; get_typlenbyvalalign(ARR_ELEMTYPE(array), &elmlen, &elmbyval, &elmalign); deconstruct_array(array, ARR_ELEMTYPE(array), elmlen, elmbyval, elmalign, &elems, &nulls, &nelems); *nkeys = nelems; *nullFlags = nulls; PG_RETURN_POINTER(elems);}``` then i debug it . this is my debug info. thank you!